如何使用Selenium和Python找到一个与用户输入有关的元素?

问题描述 投票:1回答:2

下面是HTML结构。

<div class='list'>
  <div>
    <p class='code'>12345</p>
    <p class='name'>abc</p>
  </div>
  <div>
    <p class='code'>23456</p>
    <p class='name'>bcd</p>
  </div>
</div>

有一个用户输入的config.py。如果用户输入23456到config.code,selenium python如何选择第二个对象?我使用的是 find_by_css_selector() 来定位和选择对象,但它只能选择第一个对象,也就是 代码='12345'. 我试着用 find_by_link_text()但它是一个 <p> 无元素 <a> 元素。谁能帮忙......

python selenium xpath css-selectors webdriverwait
2个回答
1
投票

要根据用户的输入来定位元素,使用的是 你需要诱导 WebDriverWait 对于 visibility_of_element_located() 您可以使用以下任何一种方式 定位策略:

  • 使用变量 XPATH:

    user_input = '23456'
    element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='list']//div/p[@class='code' and text()='" +user_input+ "']")))
    
  • 使用 %sXPATH:

    user_input = '23456'
    element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='list']//div/p[@class='code' and text()='%s']"% str(user_input))))
    
  • 使用 format()XPATH:

    user_input = '23456'
    element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='list']//div/p[@class='code' and text()='{}']".format(str(user_input)))))
    
  • 说明: : 你必须添加以下导入。

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

1
投票

试试下面的xpath。

code = '23456'
element = driver.find_element_by_xpath("//p[@class='code' and text()='" +code +"']")
© www.soinside.com 2019 - 2024. All rights reserved.