【问题标题】:Chropath for selenium xpath is not working?selenium xpath 的 Chropath 不起作用?
【发布时间】:2020-02-23 06:56:54
【问题描述】:

我安装了 chropath 来查找网站的 xpath。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome("C:\\Users\\ADMIN\\Downloads\\chromedriver_win32\\chromedriver.exe")

driver.get("https://kite.zerodha.com")

username = driver.find_element_by_xpath("//input[@placeholder='User ID']")
username.send_keys("abcc")

我想使用 chropath 查找用户名 xpath,它给了我//input[@placeholder='User ID'],但它仍然给我NoSuchElementException 错误。我认为 chropath 扩展总是会给我正确的 xpath。 这可能是什么原因?

这是我检查用户名时得到的代码

<input type="text" placeholder="User ID" autocorrect="off" maxlength="6" autofocus="autofocus" autocapitalize="characters" animate="true" label="" rules="[object Object]" dynamicwidthsize="8" xpath="1">

【问题讨论】:

    标签: python selenium-webdriver xpath webdriverwait chropath


    【解决方案1】:

    从功能上讲, 正确地找到了所需元素的 。然而,由于元素具有属性animate="true",当元素接收到光标focus 时,属性placeholder="User ID" 会发生变化,结果Selenium 无法定位该元素。


    解决方案

    要在 User ID 字段中发送 字符序列,您必须为 element_to_be_clickable() 诱导 WebDriverWait,您可以使用以下Locator Strategies

    • 使用XPATH

      driver.get('https://kite.zerodha.com/')
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[text()='User ID']//following-sibling::input[1]"))).send_keys("TANMAY")
      
    • 使用CSS_SELECTOR:

      driver.get('https://kite.zerodha.com/')
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "label.su-input-label.su-dynamic-label + input"))).send_keys("TANMAY")
      
    • 注意:您必须添加以下导入:

      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      
    • 浏览器快照:

    【讨论】:

    • 谢谢@DebanjanB。您还可以使用静态属性在 ChroPath 中生成 xpath。 1. 单击 ChroPath 选项卡中可用的设置图标 2. 在属性名称框中,键入属性值并按 Enter 3. 如果给定属性是唯一的,它将生成具有给定属性的 xpath,否则将尝试使用其他属性。 4. 如果元素没有给定属性,它将生成具有其他属性的xpath。 5. 还为少数属性提供了排序削减。如果您不想使用它们生成 xpath,请取消选中它们。
    • @SanjayKumarIChroPathCreator 好消息,虽然我个人没有使用过chropath,但我知道 Chropath 让使用 XPath 的软件专业人士的生活变得更加轻松。感谢您的创新方法。
    【解决方案2】:

    我检查了您的代码,我认为它是正确的,但是,我认为您可能缺少 .click() 元素。为了确保元素存在,您可以执行以下操作,其中我添加了可选的等待时间来加载元素。

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    
    # Handle wait time
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0
    from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0
    
    driver = webdriver.Chrome("C:\\Users\\ADMIN\\Downloads\\chromedriver_win32\\chromedriver.exe")
    
    driver.get("https://kite.zerodha.com")
    
    wait = WebDriverWait(driver, 60)
    
    username = wait.until(EC.presence_of_element_located((By.XPATH, "//input[@placeholder='User ID']")))
    username.click()
    username.send_keys("abcc")
    

    【讨论】:

      猜你喜欢
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-29
      • 2023-03-06
      相关资源
      最近更新 更多