Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Selenium和Python查找与用户输入相关的元素?_Python_Selenium_Xpath_Css Selectors_Webdriverwait - Fatal编程技术网

如何使用Selenium和Python查找与用户输入相关的元素?

如何使用Selenium和Python查找与用户输入相关的元素?,python,selenium,xpath,css-selectors,webdriverwait,Python,Selenium,Xpath,Css Selectors,Webdriverwait,以下是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> </

以下是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>

12345

abc

23456

bcd

还有一个config.py用于用户输入。如果用户将23456输入config.code,selenium python如何选择第二个对象?我正在使用
find\u by\u css\u selector()
定位和选择对象,但它只能选择第一个对象,即code='12345'。我尝试使用
find\u by\u link\u text()
,但它是
元素,而不是
元素。任何人都可以帮助….

尝试以下xpath:

code = '23456'
element = driver.find_element_by_xpath("//p[@class='code' and text()='" +code +"']")

要根据用户的输入来定位元素,请使用,并且您需要对元素的可见性进行归纳。_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+ "']")))
    
    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))))
    
    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)))))
    
  • XPATH
    中使用
    %s

    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+ "']")))
    
    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))))
    
    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)))))
    
  • XPATH
    中使用
    format()

    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+ "']")))
    
    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))))
    
    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
    

第二个对象是指

元素吗?@LoganGeorge No.One div表示一个对象,我想选择第二个对象,代码是23456,名称是bcd。对。然后,为了得到兄弟姐妹,我想它应该是驱动程序。通过xpath(//p[@class='code'和text()=''+code+']/后面的兄弟姐妹::p)找到元素(following sibling::p)@frianH it wokrs!但我并不真正理解xpath的用法。你能解释一下“//p[@class='code'和text()=”“+code+”]”吗?@LoganGeorge兄弟姐妹你在说什么吗?@yukhan这只是使用

表达式的简单逻辑。尝试搜索类名为
code
p
标记,该标记的文本为
23456
@YukChan,用于字符串合并。