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)
答案 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上,这将全部下载。如果不在环境路径上,请指定chromedriver的路径。
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()