I am trying to grab some values from the following code example but am unable to get a successful answer.
Using the US Patent and Trademark Office's website with a random trademark entered in this link. I want to grab the Registration Date which has a value of May 12, 2015
<div >
<div >
<div >US Serial Number:</div>
<div >85931937</div>
<div >Application Filing Date:</div>
<div >May 14, 2013</div>
</div>
<div >
<div >US Registration Number:</div>
<div >4735834</div>
<div >Registration Date:</div>
<div >May 12, 2015</div>
</div>
Notice this would be the fourth time the class name value is being called in the code example and is nested within other div classes.
This is what I have tried so far:
values = browser.find_elements(By.CLASS_NAME, 'value')
print(values[3])
but values returns an empty list []
Please advise on what I am doing wrong, thank you in advance.
CodePudding user response:
To print the text May 12, 2015 you can use either of the following Locator Strategies:
Using xpath and text attribute:
print(driver.find_element(By.XPATH, "//div[@class='key' and text()='Registration Date:']//following-sibling::div[1]").text)
Ideally you need to induce WebDriverWait for the visibility_of_element_located() and you can use either of the following Locator Strategies:
Using XPATH and
get_attribute("innerHTML"):print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='key' and text()='Registration Date:']//following-sibling::div[1]"))).get_attribute("innerHTML"))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
You can find a relevant discussion in How to retrieve the text of a WebElement using Selenium - Python
References
Link to useful documentation:
get_attribute()methodGets the given attribute or property of the element.textattribute returnsThe text of the element.- Difference between text and innerHTML using Selenium
