2016-03-23 8 views
1

私はPythonに合理的に新しく、どのdivクラスが最初にページに現れているかを確認しようとしています。私はテーブルの行でこれをやったが、私はdivでこれを行う方法の周りに私の頭を包んでいるように見えることはできません。Python 3 - ネストされたdivのデータを削るSelenium -

最新のアップデートが<div class="EMAIL SENT">を送信したメールか、<div class="Notes">を追加したメールかどうかを判断しようとしています。最新のアイテムは最初から上に表示されますが、その後は他の操作が行われている可能性があります。たとえば、<div class="Updated">

これを行うコードを作成したり、私はそれがこのように動作することを想像します。

for sub_div_classes in browser.find_element_by_class_name('cb'): 
    classname = ~check name of sub_div_class 
    if classname = "EMAIL SENT": 
     class_info = browser.find_element_by_class_name('plus_header_Additional_info').text 
     print(class_info) ¬output: EMAIL SENT&nbsp;:Email sent on 20-03-2016 00:22:09 by [REDACTED] 
     trigger_1() 
    if classname = "Notes": 
     trigger_2() 
    ~move on to next div class in list 

以下は私が処理しようとしているページコードです。私は本当に誰かが提供できる助言や援助を感謝しています。

<div class="cb" style="margin:5px 0 0 0;"> 
           <div class="Updated"> 
           <div class="plus_header_Additional_info">Updated&nbsp;:Incident Updated on 20-03-2016 00:22:52 by User = [REDACTED] 

           <a href="javascript:toggle2('contentDivImg2_0', 'imageDivLink2_0');" id="imageDivLink2_0"><img src="images/minus.png" style="float:right;"></a> 
           </div> 
            <div class="plus_content" style="display: block;" id="contentDivImg2_0"> 
           <div> 
              Assigned to STRIKE1, 
by User = [REDACTED]. 
           </div> 
           <br> 
          </div> 
           </div> 
           <div class="Updated"> 
           <div class="plus_header_Additional_info">Updated&nbsp;:PEND CLIENT STRIKE - 1 added on 20-03-2016 00:22:36 by [REDACTED]. 
           <a href="javascript:toggle2('contentDivImg2_1', 'imageDivLink2_1');" id="imageDivLink2_1"><img src="images/minus.png" style="float:right;"></a> 
           </div> 
            <div class="plus_content" style="display: block;" id="contentDivImg2_1"> 
           <div> 
           </div> 
           <br> 
          </div> 
           </div> 
           <div class="EMAIL SENT"> 
           <div class="plus_header_Additional_info">EMAIL SENT&nbsp;:Email sent on 20-03-2016 00:22:09 by [REDACTED] 
           <a href="javascript:toggle2('contentDivImg2_2', 'imageDivLink2_2');" id="imageDivLink2_2"><img src="images/minus.png" style="float:right;"></a> 
           </div> 
            <div class="plus_content" style="display: block;" id="contentDivImg2_2"> 
           <div> 
              To :- [NAME]@[DOMAIN].CO.UK Subject: Ticket - [IN-000999999] Description : Dear User, 

[REDACTED] 
           </div> 
           <br> 
          </div> 
           </div> 
           <div class="Updated"> 
           <div class="plus_header_Additional_info">Updated&nbsp;:Incident Updated on 12-03-2016 10:56:15 by User = [REDACTED] 

           <a href="javascript:toggle2('contentDivImg2_3', 'imageDivLink2_3');" id="imageDivLink2_3"><img src="images/minus.png" style="float:right;"></a> 
           </div> 
            <div class="plus_content" style="display: block;" id="contentDivImg2_3"> 
           <div> 
              Status:- PROGRESSING changed to PEND CLIENT, 
Assigned to SOFTWARE DEPLOYED, 
by User = [REDACTED]. 
           </div> 
           <br> 
          </div> 
           </div> 
           <div class="Notes"> 
           <div class="plus_header_Additional_info">Notes&nbsp;:Notes Added on 12-03-2016 10:55:53 by [REDACTED]. 
           <a href="javascript:toggle2('contentDivImg2_4', 'imageDivLink2_4');" id="imageDivLink2_4"><img src="images/minus.png" style="float:right;"></a> 
           </div> 
            <div class="plus_content" style="display: block;" id="contentDivImg2_4"> 
           <div> 
              <textarea id="notes4" name="notes1" cols="" class="emailForm_input1" style="width: 97%; overflow: hidden; word-wrap: break-word; resize: horizontal; height: 237px;" readonly="readonly">Hello, 
[REDACTED] 
</textarea> 
           </div> 
           <br> 
          </div> 
           </div> 
       </div> 
+0

美しいスープを試してみてください。単にsoup.find( "div")を実行すると、findは単一のdiv要素(および最初のオカレンス)を返します。 –

+0

@iamaziz、それは 'class ="でdivを見つけて、OPが求めているものではない ">"に更新されます。 –

答えて

0

のXPathでorを使用します。

.xpath("//div[@class='Notes' or @class='EMAIL SENT']")[0] 

ノートが最初に来る場合は、ノートおよびその逆を取得します。

我々は<div class="EMAIL SENT">in emailにいくつかのテキストを追加し、<div class="Notes">in notesに後からタグクラスを変更し、以下のようなあなたのHTMLスニペットのビットを変更した場合:

我々は、それがどのように動作するかlxmlのを使用して見ることができます:

In [13]: from lxml.etree import fromstring, HTMLParser 

In [14]: xml = fromstring(html, HTMLParser()) 

In [15]: xml.xpath("//div[@class='Notes' or @class='EMAIL SENT']") 
Out[15]: [<Element div at 0x7f96598d4ea8>, <Element div at 0x7f96598d4ef0>] 

In [16]: xml.xpath("//div[@class='Notes' or @class='EMAIL SENT']")[0].text 
Out[16]: 'in email\n        ' 

In [17]: xml.xpath("//div[@class='Notes' or @class='EMAIL SENT']")[1].text 
Out[17]: 'in notes\n  

だからセレンでは、xpathで要素を見つけるだけです。

+0

あなたの応答Padraicに感謝します。それは私がより完全に理解するのを助けます。 私はこれをテストするために、次のコードのビットを書いたが、私は「リスト」オブジェクトがために '何の属性「find_element_by_css_path」 ' note_base_table = browser.find_elements_by_class_name(「CB」) ' を持っていないのエラーを受信して​​います"" print(note_base_rows) ' 同様の方法は、私がデータを引き出しているときに働きました。テーブルと私は 'table_rows from base_table.find_element_by_tag_name( 'tr')に'を使用しました: 明らかに私は何かがありません。 – Logi

+0

あなたは 'note_base_table'をループして' note_base_rows.xpath ... 'を使って' note_base_ta ble.xpath'は反復の各要素ではないリストです。 –

関連する問題