2017-10-10 5 views
1

私はPythonとSeleniumを使ってスクレーパーに取り組んでいますが、私はxpathを横断する問題があります。私はこれがシンプルでなければならないと感じますが、明らかに何かが欠けています。xpath/pythonの検索で子ノードを取得しますか?

私は閲覧しているサイトをナビゲートすることができますが、XPATH検索に基づいていくつかのSPANテキストを取得する必要があります。

は私が

(driver.find_elements_by_name("start-date"))[0].click() 

(この場合は第一1)に該当するラジオボタンをクリックすることですが、私はまた、次のspanタグでキャプチャされるラジオボタンにテキストをキャプチャする必要があります。上記の例では

<label> 
    <input type="radio" name="start-date" value="1" data-start-date="/Date(1507854300000)/" data-end-date="/Date(1508200200000)/" group="15" type-id="8"> 
     <span class="start-date"> 
      10/12/2017<br>Summary text 
     </span> 
</label> 

、私はラジオボタンを見つけるために使用find_elements_by_name検索に基づいて2列変数に「2017年10月12日」と「要約テキスト」をキャプチャするために探しています。

次に、クラス名で検索した後にスパンタグを取得する必要がある、同様のコレクションに関する2番目の問題があります。これは、ページ上の適切な親ノードを検索します。その検索によって返されたノードに基づいて

(driver.find_element_by_xpath("//div[@class=\"MyClass\"]")) 

、私は「テキスト1」とその下のspanタグから「テキスト2」をつかむしたいです。

<div class="MyClass"> 
    <span> 
     <span>Text 1</span> 
    </span> 
     <span class="bullet"> 
    </span> 
    <span> 
     <span>Text 2</span> 
    </span> 
</div> 

私は、XPathに新しいですが、私は集めることができるものから、私が探していますスパンノードが、私は私の検索で見つかったノードの子でなければなりません、と私は何とか階層を下にトラバースすることができるはずです値を取得するには、私はちょうどよく分からない。

+0

良い質問、両方が同じスパンであるので – iamsankalp89

答えて

0

これは、すべてのWebElementのオブジェクトが要素法を意味し、その要素にコンテキストを変更する主な違いとWebDriverオブジェクトが持っている同じfind_element_by_*方法を、持っている、実際には非常に簡単です選択された要素の子のみを持つことになります。

あなたが行うことができるはず念頭に置いて

:ここに何が起こる

my_element = driver.find_element_by_class_name('MyClass') 
my_spans = my_element.find_elements_by_css_selector('span>span') 

たちはクラスMyClassとの最初の要素をつかむことで、その要素のコンテキストから、我々はスパンされている要素を検索とスパンの子供

+0

それは、ありがとう! – user3246693

0

次のxパスで試すことができます。

//div[@class='MyClass']/span[1]/span ---- To get Text 1 
//div[@class='MyClass']/span[3]/span -----To get Text 2 

または

(//div[@class='MyClass']/span/span)[1] ---- To get Text 1 
(//div[@class='MyClass']/span/span)[2] ---- To get Text 2 
+0

これも働いて、ありがとう! – user3246693

関連する問題