我正在尝试从该html元素中提取数字:
<td bgcolor="green">
<font color="white">
"49.8 "
<small>dBmV</small>
</font>
</td>
如何仅提取49.8而不获得bBmV?
我能够使用xpath来返回全部49.8 dbmv,但是当仅搜索“ 49.8”的xpath时,我会收到错误消息
错误:
invalid selector: The result of the xpath expression "/html/body/p[1]/table/tbody/tr/td/table[2]/tbody/tr[2]/td[4]/font/text()" is: [object Text]. It should be an element.
我尝试过:
browser.find_element_by_xpath("/html/body/p[1]/table/tbody/tr/td/table[2]/tbody/tr[2]/td[4]/font").text
返回 49.8 dBmV
然后:
browser.find_element_by_xpath("/html/body/p[1]/table/tbody/tr/td/table[2]/tbody/tr[2]/td[4]/font/text()").text
返回上述异常。
我只想要数字49.8(明显改变)。 我知道我以后可以提取数字,但是我希望有一些我可以用来直接从html中获取详细信息的东西,有点整理
答案 0 :(得分:2)
要提取文本 49.8 ,您可以使用以下Locator Strategy:
通过execute_script()
和 textContent 使用 xpath :
print(driver.execute_script('return arguments[0].firstChild.textContent;', driver.find_element_by_xpath("//td[@bgcolor='green']/font[@color='white']")).strip())
通过splitlines()
和get_attribute()
使用 xpath :
print(driver.find_element_by_xpath("//td[@bgcolor='green']/font[@color='white']").get_attribute("innerHTML").splitlines()[1])
答案 1 :(得分:1)
您可以使用第一行,并获得如下数字:
text_num = browser.find_element_by_xpath("/html/body/p[1]/table/tbody/tr/td/table[2]/tbody/tr[2]/td[4]/font").text
print(float(text_num.split()[0]))
希望这对您有帮助!
答案 2 :(得分:1)
您可以replace
这样的多余文本:
first_text = browser.find_element_by_xpath("/html/body/p[1]/table/tbody/tr/td/table[2]/tbody/tr[2]/td[4]/font").text
second_text = browser.find_element_by_xpath("/html/body/p[1]/table/tbody/tr/td/table[2]/tbody/tr[2]/td[4]/font/small").text
only_first_text = first_text.replace(second_text, '')
答案 3 :(得分:0)
Selenium中的find_element_by_xpath
API仅支持返回元素,因此即使在XPath中也可以指定一个表达式,该表达式仅返回您要查找的文本,在这种情况下,使用XPath是不可能的