2016-12-27 3 views
0

Selenium(Python)でXPathの要素を検索しようとして問題があります。私は2つのアクションを実行したい:最初に、親の子要素にアクセスし(サブサブの子である)、次に同じことをするために次の兄弟タグにアクセスする。XPATHで子どもにアクセスする

<div class="A"> 

    <div class="non-desired"></div> 

    //First Access to B 
    <div class="B"> 
    //In order to treat C 
    <div class="C"></div> 
    </div> 

    // And then doing the same for all next B elements 
    <div class="B"></div> 

    ... 

    <div class="B"></div> 

</div> 

Cクラスにアクセスするために、最初のBクラス(親divの2番目の子)にアクセスしたいと考えています。そして、それが終わったら、2番目のBクラスにアクセスし、3番目のBクラスを同じように実行します。

私は基本的なXPATHを行う方法を知っていますが、私は迷っています。私がやったことです:

//div[@class='A']/following-sibling::div 
+0

Bは兄弟ではなく、Aの子です。 – choroba

+0

はい、でもそれは子供の次のタグである兄弟についてです – Mystyroi

答えて

0

あなたはこのXPathを使用することができますBにアクセスするには:

あなたは、次のいずれか、あなただけの変更をしたい場合は、あなたのBの第二の要素を与える
driver.find_element_by_xpath('/html/body/div/div[2]') 

インデックス:

driver.find_element_by_xpath('/html/body/div/div[2]/div') 

/html/body/div/div[3] 

Bの子にアクセスするには、あなたは、XPathの1つの以上のdivを追加します210

そして、あなたが使用するすべての要素の親にアクセスするには:

driver.find_element_by_xpath('/html/body/div/div[2]/div')._parent 

このは役に立ちました願っています。

+0

ありがとうございました – Mystyroi

0

あなたは

allClassB = driver.find_elements_by_xpath("//div[@class='A']/div[@class='B']") 

により、クラスBを持っているすべての要素が今、あなたは目的場合は、各要素

通過するforループを使用することができ、クラスBを持つすべての要素のリストを持って見つけることができますクラスCのすべての要素を見つけることです。次のようにするだけです。

allClassC = driver.find_elements_by_xpath("//div[@class='A']/div[@class='B']/div[@class='C']") 
+0

回答ありがとうございます。クラスCのすべての要素をvarにキャッチしました。クリックしただけでいいですか? 'while Mystyroi

+0

それは機能するかどうかを調べることができます。すべての場合ではなく、それは動作します。場合によっては、最初のクリック後にページが更新されると、2回目のクリックで例外がスローされることがあります。 'StaleElementReferenceException'例外の場合は、(forループ内で)要素を再検索する必要があります –

+0

私は欲しいものを達成するために正しい方法でいます。しかし、私はちょうど問題があります。私のループと私のxpathで、div [j](jが宣言され、インクリメントされている)を書くと、jの値は彼の値に置き換えられず、Pythonはそれを置き換えるのではなく変数名を保持します。通常、リスト[j]を実行するとJが置換されますが、XPATH式ではそうではありません。私はdiv ['j']に疲れましたが、jはいつも同じ値を保持しています。 – Mystyroi

関連する問題