2016-06-18 3 views
1

ここで私はPythonのセレンどのように抽出テキスト要素の後

<fieldset> 
    <div class="grid-3-12 form-no-lbl"> 
      <label class="form-lbl">CNPJ:</label>011234560083 
    </div> 
    <div class="grid-3-12 form-no-lbl"> 
      <label class="form-lbl">CIDADE:</label>TAUBATE 
    </div> 
    <div class="grid-3-12 form-no-lbl"> 
      <label class="form-lbl">ESTADO:</label>SP 
    </div> 
    <div class="grid-3-12 form-no-lbl"> 
      <label class="form-lbl">TOTAL BRUTO: </label>2.407,09 
    </div> 
    <div class="grid-3-12 form-no-lbl"> 
      <label class="form-lbl">LIQ: </label>2.344,09 
    </div> 
</fieldset> 

このコードからテキストを抽出しようとしているHTMLコードがある

print browse.find_element_by_xpath("//div[@class='grid-3-12 form-no-lbl']").text 

戻りちょうど最初の要素:011234560083

"LIQ:" = 2.344,09

答えて

0

のような各ラベルの値を読みたいセレンの一般的な問題。 の場合、テキストノードをfind_element_by_*コマンドで直接照合することはできません。

あなたの場合は、事前にLIQESTADOなどのラベルを知っていて、ラベルで値を取得する必要があります。

アイデアは、テキストによるlabelを見つけ親にツリーを上に移動、テキストを取得、:によって分割され、所望の値に対応することになる最後の要素を取得するには、次のようになります。

label = "ESTADO" 
text = driver.find_element_by_xpath("//label[starts-with(., '%s:')]/.." % label).text 
print(text.split(":")[-1].strip()) 
1

seleniumlxmlの両方を使用できるという贅沢がある場合は、seleniumを使用して目的のページに移動し、lxmlを使用してHTMLを解析できます。例えば、

import lxml.html as LH 
# content = browser.page_source 
content = '''\ 
<fieldset> 
    <div class="grid-3-12 form-no-lbl"> 
      <label class="form-lbl">CNPJ:</label>011234560083 
    </div> 
    <div class="grid-3-12 form-no-lbl"> 
      <label class="form-lbl">CIDADE:</label>TAUBATE 
    </div> 
    <div class="grid-3-12 form-no-lbl"> 
      <label class="form-lbl">ESTADO:</label>SP 
    </div> 
    <div class="grid-3-12 form-no-lbl"> 
      <label class="form-lbl">TOTAL BRUTO: </label>2.407,09 
    </div> 
    <div class="grid-3-12 form-no-lbl"> 
      <label class="form-lbl">LIQ: </label>2.344,09 
    </div> 
</fieldset>''' 

root = LH.fromstring(content) 
labels = root.xpath('//fieldset/div[@class="grid-3-12 form-no-lbl"]/label') 
data = [[item.strip() for item in [elt.text, elt.tail]] for elt in labels] 

利回り

[['CNPJ:', '011234560083'], 
['CIDADE:', 'TAUBATE'], 
['ESTADO:', 'SP'], 
['TOTAL BRUTO:', '2.407,09'], 
['LIQ:', '2.344,09']] 
+0

パーフェクトが、申し訳ありませんが、どのように私はこのことから全体のHTMLを取得することができます:{>>>のelem = brf.find_element_by_xpath( "// divの[@クラス= 'グリッド-3-12フォーム-NO-LBL ']」) >>> print elem } – Lara

+2

@Lara確実に' elem.get_attribute( "outerHTML") 'を使用してください。 (または出力に現在の要素表現が必要ない場合は 'innerHTML'を使用してください)。 – alecxe

1

それはあなたのコードが動作しないということは本当に奇妙に思えます。私はこのようなケースに遭遇していません。私は以下のコードが動作するはずだと思います。基本的には、LABELの中のテキストをつかみ、すでに見つかっているテキストの前に追加します。この組み合わせでは、探しているテキストが表示されます。

lines = browse.find_elements_by_css_selector("div.grid-3-12.form-no-lbl") 
for line in lines 
    print line.find_element_by_css_selector("label.form-lbl").text + line.text 
関連する問題