我有一个带有工具提示的web元素,显示以下消息: ●客户账面收入$ 20,966,618
该工具提示的HTML代码如下。我能够使用Selenium Webdriver将鼠标悬停在web元素上,这使得工具提示可见,但我无法弄清楚如何从中获取文本。有人可以帮忙吗?
<div class="highcharts-tooltip" style="position: absolute; left: 755px; top: 0px; display: block; opacity: 1; pointer-events: none; visibility: visible;">
<span style="position: absolute; font-family: "Roboto",sans-serif; font-size: 12px; white-space: nowrap; color: rgb(51, 51, 51); margin-left: 0px; margin-top: 0px; left: 0px; top: 0px;">
<div class="client-rate-bench-chart">
<table class="table rdo-table-tooltip">
<tbody>
<tr>
<td>
<span style="color:rgba(45,108,162,1)">●</span>
Client Book Revenue
</td>
<td> $20,966,618 </td>
</tr>
</tbody>
</table>
</div>
</span>
</div>
答案 0 :(得分:1)
您可以抓住该表,然后抓取<tr>
from bs4 import BeautifulSoup
from selenium import webdriver
driver = webdriver.Firefox()
driver.get(URL)
html = driver.page_source # this is how you get the HTML
soup = BeautifulSoup(html)
table = soup.find('table', class_='rdo-table-tooltip')
tooltip = table.find('tr')
text = tooltip.text
由于HTML的格式化, text
会有很多额外的空格,但你可以将其删除 - 只需拆分所有空格,然后重新加入像这样的元素
final_text = ' '.join(text.split())
print final_text
# ● Client Book Revenue $20,966,618
对于多个<tr>
,您可以使用.find_all('tr')
,然后使用列表推导来获取行内容的列表。它看起来像这样
soup = BeautifulSoup(html)
table = soup.find('table', class_='rdo-table-tooltip')
tooltips = table.find_all('tr')
text = [' '.join(tooltip.text.split()) for tooltip in tooltips]
然后,文本将是包含每个<tr>
答案 1 :(得分:0)
作为替代方法,您可以使用re.findall返回标记之间的所有文本实例。这将涉及到之后的一些清理,但我发现在使用Selenium时一般非常方便。
import re
tooltips = re.findall('<tr>(.*?)<tr>', html.replace('\n', ''))
for tooltip in tooltips:
print tooltip