Skip to content
Advertisement

How to locate next element after text found in b tag – Selenium Python

I’m trying to extract the text value following a b tag that contains specific text. I’m using Selenium web driver with Python3.

The HTML inspected for the value I’m trying to return (11,847) is here:

HTML of desired Xpath

This has an Xpath below (I’m not using this xpath directly to find the element as the table construction changes for different examples that I plan to iterate through):

/html/body/form[1]/div[2]/table[2]/tbody/tr[3]/td[2]/text()

As an example, when I print the below it returns Att: i.e. the element located by my search for the text ‘Att’ within the b tags.

att=driver.find_element("xpath",".//b[contains(text(), 'Att')]").text

print(att)

Is there a way I can return the value following <b>Att:</b> by searching for ‘Att:’ (or conversly, I’d also like to return the value following <b>Ref:</b>.

Thanks in advance.

Advertisement

Answer

11,847 text content belongs to td node.
You can locate this td element by it’s child b text content.
Then you will be able to retrieve the entire text content of that td node.
It will contain Att: and extra spaces and the desired 11,847 string.
Now you will need to remove the Att: and extra spaces so only 11,847 will remain.
As following:

#get the entire text content
entire_text = driver.find_element(By.XPATH,"//td[.//b[contains(text(), 'Att')]]").text
#get the child node text content
child_text = driver.find_element(By.XPATH,"//b[contains(text(), 'Att')]").text
#remove child text content from entire text content
goal_text = entire_text.replace(child_text,'')
#trim white spaces
goal_text = goal_text.strip()
User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement