Python Selenium Webdriver:枚举超链接和下载文件
Python Selenium Webdriver: Enumerate hyperlinks and download files
我正在尝试从一个网页中枚举所有超链接(带有要从中下载的文件),然后一个接一个地下载这些文件。单击超链接需要填写一个表格,我为此创建了一个 class 来完成该表格。我在代码的 运行 期间收到 "AttributeError: 'tuple' object has no attribute 'click'"。我特此附上代码,任何纠正此问题的建议将不胜感激。
import os
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
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')
assert "resources" in driver.title
continue_link = driver.find_element_by_tag_name('a')
elem = driver.find_elements_by_xpath("//*[@href]")
z = elem
for links in enumerate(z):
driver.implicitly_wait(4)
for link in enumerate(links):
link.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(3)
FormPage().fill_form(data).submit()
请检查您对enumerate 的用法,这显然是错误的。
鉴于
elem = driver.find_elements_by_xpath("//*[@href]")
您现在可以简单地迭代此集合,例如:
for link in elem:
link.click()
其余的你不需要。
我正在尝试从一个网页中枚举所有超链接(带有要从中下载的文件),然后一个接一个地下载这些文件。单击超链接需要填写一个表格,我为此创建了一个 class 来完成该表格。我在代码的 运行 期间收到 "AttributeError: 'tuple' object has no attribute 'click'"。我特此附上代码,任何纠正此问题的建议将不胜感激。
import os
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
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')
assert "resources" in driver.title
continue_link = driver.find_element_by_tag_name('a')
elem = driver.find_elements_by_xpath("//*[@href]")
z = elem
for links in enumerate(z):
driver.implicitly_wait(4)
for link in enumerate(links):
link.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(3)
FormPage().fill_form(data).submit()
请检查您对enumerate 的用法,这显然是错误的。 鉴于
elem = driver.find_elements_by_xpath("//*[@href]")
您现在可以简单地迭代此集合,例如:
for link in elem:
link.click()
其余的你不需要。