点击事件下载所有文件

时间:2019-05-04 11:56:43

标签: python

webdriver = webdriver.Chrome("C:/Users/acer/chromedriver_win32/chromedriver.exe")
url = 'http://biokb.ncpsb.org/AllerGAtlas/index.php/Home/Browse/?fbclid=IwAR2RPwrnsT7zR9SEdU0PW-eJ7HAelg6WRyn23-hCjTrNCEOb1uOMd_qG3ns'
webdriver.get(url)
webdriver.save_screenshot('test.png')
webdriver.find_elements_by_class_name('fa fa-download').click()
#webdriver.find_element_by_xpath('//*[@class="fa fa-download"]').click()

我想下载所有可用文件。

我得到的错误:

  

InvalidSelectorException:消息:无效选择器:不允许使用复合类名   (会议信息:无头铬= 73.0.3683.103)   (驱动程序信息:chromedriver = 2.45.615291   (ec3682e3c9061c10f26ea9e5cdcf3c53f3f74387),平台= Windows NT 10.0.17134 x86_64)

3 个答案:

答案 0 :(得分:0)

您正在使用find_elements,它将返回Web元素列表。 您无法在其上调用click()方法。

click()方法适用于Web元素。

请尝试以下代码:

all_links = webdriver.find_elements_by_class_name('fa fa-download')
for link in all_links:
  link.click()

答案 1 :(得分:0)

webdriver.find_elements_by_class_name('fa fa-download').click()

请注意find_elements返回列表,因此您应该使用find_element。 但是,当您使用find_element_by_class_name时,您将无法看到提供错误信息的多重类名,因为您会看到错误消息。因此,请尝试下面的代码。

webdriver.find_element_by_class_name('fa-download').click()

OR

webdriver.find_elements_by_class_name('fa-download')[0].click()

或者您可以使用CSS选择器。

webdriver.find_elements_by_css_selector('.fa.fa-download')[0].click()

已编辑

尝试诱导webdriverwait识别元素,然后单击任一选项。

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By   

elements=WebDriverWait(driver,30).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR,'.fa.fa-download')))

elements[0].click()

OR

elements=WebDriverWait(driver,30).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR,'.fa.fa-download')))
ActionChains(driver).move_to_element(elements[0]).click().perform()

答案 2 :(得分:0)

您可以避免.click并将名称连接到基本url和.get上,这将全部下载。如果不在环境路径上,请指定ch​​romedriver的路径。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

base = 'http://biokb.ncpsb.org/AllerGAtlas/index.php/Home/Download/gene/genesymbol/'
d = webdriver.Chrome()
d.get('http://biokb.ncpsb.org/AllerGAtlas/index.php/Home/Browse/?fbclid=IwAR2RPwrnsT7zR9SEdU0PW-eJ7HAelg6WRyn23-hCjTrNCEOb1uOMd_qG3ns')
links = [base + item.text for item in  WebDriverWait(d,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#geneTable td:nth-of-type(1)")))]
for link in links:
    d.get(link)
d.quit()