2017-04-12 40 views
0

私は、次のメッセージを示すツールチップを持つWeb要素を持っています。 ●クライアントブック収入$ 20,966,618PythonでSelenium Webdriverを使用して属性なしでツールチップからテキストを取得する方法は?

このツールチップの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> 

答えて

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 

textの最初のインスタンスをつかむことができますがあるため、HTMLのフォーマット方法の余分な空白がたくさんありますが、あなたはそれを取り除くことができます - ちょうどすべての空白で分割して、あなたがを使用することができ、複数の場合は<tr>秒この

final_text = ' '.join(text.split()) 
print final_text 
# ● Client Book Revenue $20,966,618 

のような要素を再加入を使用して、リスト内包表記を使用して行の内容のリストを取得します。それは次に、テキストを使用すると、タグの間のテキストのすべてのインスタンスを返すためにre.findallを使用することができます別の方法として、各<tr>

+0

Seleniumのツールチップに関連するHTMLコードをBeautifulSoupで使用するにはどうすればよいですか? – sprogissd

+0

は答えを – wpercy

+0

で更新しました!ありがとうございました!私は 'soup = BeautifulSoup(html)'を 'soup = BeautifulSoup(html、" html.parser ")'に変更すべきだというエラーメッセージを受け取りました。 – sprogissd

0

からテキストを含む文字列のリストになります。この

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] 

ようになります。これは後にいくつかのクリーンアップが必要になりますが、私はそれがセレンと一緒に働くときに一般にはかなり便利だとわかりました。

import re 

tooltips = re.findall('<tr>(.*?)<tr>', html.replace('\n', '')) 

for tooltip in tooltips: 
    print tooltip 
+0

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – wpercy

+0

興味深い!リンクありがとう。 – Paprike

関連する問題