使用硒无法通过部分链接文本单击项目的问题

时间:2019-09-04 15:44:44

标签: python html css selenium selenium-chromedriver

因此,几年前,我制作了一个脚本,该脚本将使用硒来导航商店,通过商品名称查找商品,然后选择商品。我试图通过查看我的旧代码来重新制作它,但是它无法正常工作。我正在尝试使用硒单击在项目上使用inspect元素时找到的第一个包含它们具有的文本的项目。但是,我一直遇到相同的错误,即找不到包含该文本的元素。

from selenium import webdriver

driver=webdriver.Chrome('fakepath/fake')
driver.get("https://www.supremenewyork.com/shop/all")

driver.find_element_by_xpath("//a[@href='/shop/all/jackets']").click()
driver.find_element_by_partial_link_text('GORE-TEX')

这是包含我要使用硒查找并单击的文本的元素

<a class="name-link" href="/shop/jackets/g1ze294ol/qapno01c2">GORE-TEX Taped Seam Jacket</a>
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"partial link text","selector":"GORE-TEX"}
  (Session info: chrome=76.0.3809.132)

2 个答案:

答案 0 :(得分:1)

您需要等到元素可单击。这将单击页面上的第一个匹配链接。

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


driver.get("https://www.supremenewyork.com/shop/all")
driver.find_element_by_xpath("//a[@href='/shop/all/jackets']").click()

link = WebDriverWait(driver,15).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "GORE-TEX")))
link.click()
time.sleep(3)

答案 1 :(得分:0)

执行driver.find_element_by_xpath("//a[@href='/shop/all/jackets']").click()行时,您要单击的元素尚未准备好被单击。换句话说,您需要等待直到元素被加载。

幸运的是,Selenium允许您等待某些条件,例如“可点击”。请参阅here以供参考。

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

driver=webdriver.Chrome('fakepath/fake')
wait = WebDriverWait(driver, 10)

driver.get("https://www.supremenewyork.com/shop/all")

try:
    wait.until(EC.element_to_be_clickable((By.XPATH, "//a[@href='/shop/all/jackets']")).click()
    driver.find_element_by_partial_link_text('GORE-TEX')
finally:
    driver.quit()