使用href查找元素,然后单击它。复制xpath不起作用

时间:2019-05-25 15:18:31

标签: python selenium

我正在尝试使用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。

3 个答案:

答案 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()
  1. link_text表示您实际看到的文本。 [快速扫描]
  2. 登录需要花费时间,脚本会在创建选项卡之前尝试定位,从而导致错误。
  3. 如果没有延迟登录,您的xpath将会起作用。
  4. 在提交表单之前单击“记住我”。还是不要,因为硒每次运行都会启动一个干净的会话。

答案 2 :(得分:0)

尝试一下:

scanelements = driver.find_elements_by_xpath('//*[@id='quickscan-tab']')
for elt in scanelements :
   elt.click()
   break