I'm using the python package selenium to write a script that will automatically set up appointments for myself every week. What I ultimately want here is to be able to click the button with id="1103222339". I initally tried driver.find_element_by_id("1103222339").click()
, but I cannot guarentee that every time I run this script that the appointment I need will correspond to this ID. To solve this issue, I want to look at the label that has text specifying the time and date of the appointment I want, then to somehow retrieve the id through that for value.
I have not used xpath before, how do I find the element that a label is for through its text?
CodePudding user response:
You can build XPath expression locating the target input
element based on the time, as following:
driver.find_element_by_xpath("//tr[.//label[contains(text(),'November 24, 2021 3:20 PM')]]//input").click()
Here you can, of cause, set the desired text according to your needs.
The XPath I built means: "locate tr
element that has inside it a label
element that contains November 24, 2021 3:20 PM'
text. So inside this tr
find an input
element."
This is what you need here.
CodePudding user response:
To click on the <input>
button element you can't use the id="1103222339"
as it is dynamically generated and would change every time you access the application.
To click on the element you can use either of the following Locator Strategies:
Using
css_selector
:driver.find_element(By.CSS_SELECTOR, "a.StrongText[for]").click()
Using
xpath
:driver.find_element(By.XPATH, "//label[@for and @class='StrongText'][contains(., 'November 24, 2021 3:20 PM')]").click()