我试图从网页下载所有xml文件。该过程需要一个接一个地定位xml文件下载链接,并且一旦点击这样的下载链接,就会导致需要提交下载开始的表单。我面临的问题在于这些循环的迭代,一旦从网页下载第一个文件,我收到一个错误:
" selenium.common.exceptions.StaleElementReferenceException:消息:陈旧元素引用:元素不再附加到DOM或页面已刷新"
" 97081数据扩展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()
答案 0 :(得分:0)
我为您找到了一种解决方法,无需提交任何字段。
您需要在此图片底部的类字段中获取ID(例如此处为962721)
然后,像这样使用此URL: 的 https://data.gov.in/node/962721/download 强>
发现这只是做了一些"逆向工程"。当您进行网页报废时,请始终查看.js文件,并在网络标签上查看所有请求。