我正在尝试使用python的硒从this website上抓取一些信息。
首先,我登录该网站并转到the page。然后,我想单击“快速扫描”选项卡以抓取一些信息。但是,那就是我被卡住的地方。我找不到点击该标签的方法。
请注意,如果我设法导航到the page,这个问题将会克服,尽管登录时,即使将这样的页面放在WebDriver中,我仍然会重定向到this one。 / p>
要获得所需的page,我尝试通过xpath和链接来查找元素,但是找不到元素。
import requests
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
driver =webdriver.Chrome(executable_path ="mypath")
driver.get("https://vc4a.com/ventures/autocollect/#quickscan-tab")
#find username and password bar
username = driver.find_element_by_id("user_login")
password = driver.find_element_by_id("user_pass")
#Input password and username
username.send_keys("username")
password.send_keys("password")
#click on submit
driver.find_element_by_name("wp-submit").click()
driver.find_element_by_name("rememberme").click()
#try to find element using text in the link
driver.find_elements_by_link_text('#quickscan-tab')[0].click()
#try to find element using xpath from the inspected element
driver.find_element_by_xpath('//*[@id="subnav"]/li[3]/a').click()
我希望能够打开标签页,以便可以抓取内容。
当我使用第一个代码时,它返回以下错误:
IndexError: list index out of range
但是,通过查看页面,我确实看到确实有2个元素带有文本“#quickscan-tab”,所以我不明白为什么索引0会超出范围。
当我使用第二个代码时,它返回以下错误:
NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="subnav"]/li[3]/a"}
(Session info: chrome=74.0.3729.169)
(Driver info: chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Mac OS X 10.14.5 x86_64)
我所做的只是复制xpath。
答案 0 :(得分:0)
driver.find_elements_by_link_text('#quickscan-tab')[0] .click()-错误
链接文本不能像这样工作,您需要创建其他定位器。试试下面的XPath
driver.find_element_by_xpath((//*[@id='quickscan-tab'])[0])
答案 1 :(得分:0)
我在该页面上创建了一个帐户,并尝试了此修改后的脚本,该脚本可以正常工作:
import requests
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
driver = webdriver.Chrome()
driver.get("https://vc4a.com/ventures/autocollect/#quickscan-tab")
#find username and password bar
username = driver.find_element_by_id("user_login")
password = driver.find_element_by_id("user_pass")
#Input password and username
username.send_keys("username")
password.send_keys("password")
#click on submit
driver.find_element_by_name("rememberme").click()
driver.find_element_by_name("wp-submit").click()
time.sleep(10)
#try to find element using text in the link
driver.find_elements_by_link_text('Quickscan')[0].click()
#try to find element using xpath from the inspected element
driver.find_element_by_xpath('//a[text()="Quickscan"]').click()
答案 2 :(得分:0)
尝试一下:
scanelements = driver.find_elements_by_xpath('//*[@id='quickscan-tab']')
for elt in scanelements :
elt.click()
break