问题
The following is the HTML structure:
<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>
And there is a config.py for user input. If the user input 23456 to config.code, how can the selenium python select the second object? I am using find_by_css_selector()
to locate and select the object, but it can only select the first object, which is Code='12345'. I tried to use find_by_link_text()
, but it is a <p>
element not <a>
element. Anyone can help.....
回答1:
To locate the element with respect to the input by the user using Selenium and python you need to to induce WebDriverWait for the visibility_of_element_located()
and you can use either of the following Locator Strategies:
Using variable in
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+ "']")))
Using
%s
inXPATH
: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))))
Using
format()
inXPATH
: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)))))
Note : You have to add the following imports :
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
回答2:
Try the below xpath:
code = '23456'
element = driver.find_element_by_xpath("//p[@class='code' and text()='" +code +"']")
来源:https://stackoverflow.com/questions/62188981/how-to-find-an-element-with-respect-to-the-user-input-using-selenium-and-python