Python Selenium : Stale Element Reference Exception Error

标签 python loops selenium webdriver

我面临的问题在于这些循环的迭代,一旦从网页下载第一个文件,我就会收到错误:

“selenium.common.exceptions.StaleElementReferenceException:消息:过时的元素引用:元素不再附加到 DOM 或页面已刷新”

“97081 data-extension xml”是迭代中的第二个可下载文件。我特此附上代码,任何纠正此问题的建议将不胜感激。

import os
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

fp = webdriver.FirefoxProfile()

fp.set_preference("browser.download.folderList", 2)
fp.set_preference("browser.download.manager.showWhenStarting", False)
fp.set_preference("browser.download.dir", "F:\Projects\Poli_Map\DatG_Py_Dat")
fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "text/xml")

driver = webdriver.Firefox(firefox_profile=fp)

driver.get('https://data.gov.in/catalog/variety-wise-daily-market-prices-data-cauliflower')
wait = WebDriverWait(driver, 10)

allelements = driver.find_elements_by_xpath("//a[text()='xml']")

for element in allelements:
    element.click()
    class FormPage(object):
        def fill_form(self, data):
            driver.execute_script("document.getElementById('edit-download-reasons-non-commercial').click()")
            driver.execute_script("document.getElementById('edit-reasons-d-rd').click()")
            driver.find_element_by_xpath('//input[@name = "name_d"]').send_keys(data['name_d'])
            driver.find_element_by_xpath('//input[@name = "mail_d"]').send_keys(data['mail_d'])
            return self

        def submit(self):
            driver.execute_script("document.getElementById('edit-submit').click()")

    data = {
        'name_d': 'xyz',
        'mail_d': 'xyz@outlook.com',
    }
    time.sleep(5)
    FormPage().fill_form(data).submit()

    time.sleep(5)
    window_before = driver.window_handles[0]
    driver.switch_to_window(window_before)
    driver.back()

最佳答案

调用 submit() 后刷新页面后,allelements 中的 webElement 不再有效

而不是

allelements = driver.find_elements_by_xpath("//a[text()='xml']")

for element in allelements:
    element.click()

尝试

allelements = len(driver.find_elements_by_xpath("//a[text()='xml']"))

for index in range(allelements):
    driver.find_elements_by_xpath("//a[text()='xml']")[index].click()

关于Python Selenium : Stale Element Reference Exception Error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46842849/

相关文章:

java - 如何在 Selenium WebDriver 中调用 user-extensions.js

python pandas read_csv 如何解析微秒

每 10 分钟更新一次 YouTube 缩略图的 Python 代码在大约一个小时后失败——我需要使用刷新 token 吗?

C++ While If 条件 y/n 用户选择

facebook - 在 Behat Mink 中的场景之间重置 session 。怎么禁用?

java - XPath//*[@href] 不仅仅抓取链接

python - 网络扫描器脚本返回问号

python - pyvenv-3.4 返回非零退出状态 1

javascript - 通过过滤连接两个数组

Java 在迭代时向 ArrayList 添加项目