selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法使用Selenium和Python定位元素

时间:2018-12-29 04:49:14

标签: python selenium-webdriver xpath css-selectors webdriverwait

无法与href链接进行交互。

代码试用:

browser = webdriver.Chrome() 
browser.implicitly_wait(5) 
browser.get(URL) 
webbrowser.open(URL) 
#if Size == 'Large': 
ClickS =browser.find_element_by_id('product-select').click() 
SizeS = browser.find_element_by_xpath("//option[@value='12218866696317']").click() 
#Send to cart 
AddtoCart = browser.find_element_by_css_selector("input[type='submit']").click() 
GotoCart = browser.find_element_by_partial_link_text("Cart").click()

代码和错误快照:

enter image description here

HTML:

<a href="/cart" class="cart-heading">Cart</a>

HTML快照:

enter image description here

2 个答案:

答案 0 :(得分:1)

此错误消息...

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element {"method":"link text","selector":"Cart"}

...表示 ChromeDriver 无法根据该行找到所需的元素:

GotoCart = browser.find_element_by_link_text("Cart").click()

解决方案

您需要诱使 WebDriverWait 以使所需的元素可点击,并且可以使用以下任一解决方案:

  • 使用LINK_TEXT

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "Cart"))).click()
    
  • 使用CSS_SELECTOR

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "section#header a.cart-heading[href='/cart']"))).click()
    
  • 使用XPATH

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//section[@id='header']//a[@class='cart-heading' and @href='/cart']"))).click()
    
  • 注意:您必须添加以下导入:

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

PS :您可以在Selenium “selenium.common.exceptions.NoSuchElementException” when using Chrome

中找到详细的讨论

答案 1 :(得分:0)

该错误位于堆栈跟踪的底部,无法从您提供的链接文本中找到该元素。这个人可能遇到了同样的问题,即python的运行速度太快并且页面没有完全加载:How to use find_element_by_link_text() properly to not raise NoSuchElementException?

因此,只需在设置browser.implicitly_wait(10)的行之后添加browser