2017-10-06 23 views
1
el = driver.find_elements_by_xpath("//div[contains(@class,'statsprogramsgridmodal')]//div[contains(@class,'ui-grid-icon-ok')]") 

私はweb要素を見つけるためにxpathの上に書いています。それは私に3つの結果を与える。 2番目のWeb要素をクリックします。あなたはそれがどのようにPythonのセレンでできますか教えてください?python seleniumのweb要素のリストから2番目の要素をクリックする方法は?

+0

をどちらの第2要素ですか?兄弟? HTMLの例を教えてください。 – Wandrille

+0

それは兄弟ではない、3人とも同じlavelである –

答えて

2

をすべての検索結果から一致:

el = driver.find_element_by_xpath(
    "(//div[contains(@class,'statsprogramsgridmodal')]//div[contains(@class,'ui-grid-icon-ok')])[2]") 
同じレベルから2番目の子供を返すのXPathと:

el = driver.find_element_by_xpath(
    "//div[contains(@class,'statsprogramsgridmodal')]//div[contains(@class,'ui-grid-icon-ok')][2]") 

又は複数の要素復帰のXPathを有する:

el = driver.find_elements_by_xpath(
    "//div[contains(@class,'statsprogramsgridmodal')]//div[contains(@class,'ui-grid-icon-ok')]")[1] 

または複数の要素を返すCSSセレクタと:

el = driver.find_elements_by_css_selector(
    "div[class*='statsprogramsgridmodal'] div[class*='ui-grid-icon-ok']")[1] 
+0

あなたの最初の解決策は私のために働いた。問題はインデックスの番号付けだけです。私の場合、xpathの後に[2]インデックスを設定すると、3番目の要素が選択され、[1]は2番目の要素を選択し、[0]インデックスは最初の要素を選択します。あなたはそれを変更するだけで、私はあなたの答えを受け入れるでしょう –

+0

@ Shoaib Akhtar、XPathはベース1のインデックスを取り、コマンドはベース0の配列を返します。もう一度それを確認できますか? '(// xxx/xxx)[2]'は '// xxx/xxx [2]'が2番目の子を返す間に2番目の結果を返すことに注意してください。 –

+0

ありがとうございます。私はxpathを中括弧driver.find_element_by_xpath( "(xxx/xxx)[2]")に入れていませんでした。あなたのソリューションはうまくいきます。ありがとう –

0

あなたが試すことができます:

theTagはあなたが好きです
driver.find_element_by_xpath('//yourXpath/following-sibling::node()').click() 

または

driver.find_element_by_xpath('//yourXpath/following-sibling::theTag').click() 

:第2回を返すのxpathでのdiv、trは、UL、...

関連する問題