selenium の driver.find_element_by_xpath に文字列を直接入力を行うと実行可能なんですが、変数を入れるとエラーが表示されます。
# 正常動作 driver.find_element_by_xpath("//div[@class='hogehoge'][1]").click() # エラー動作1 num = 1 driver.find_element_by_xpath("//div[@class='hogehoge'][" + str(num) + "]").click() # エラー動作2 word = "//div[@class='hogehoge'][1]" driver.find_element_by_xpath(word).click()
回答宜しくお願いします。
[追記1]
変数内の「'」が良くないのかと思い
word = "//div[@class=\'hogehoge\'][1]"
これも試しましたが結果は変わりませんでした。
[追記2]
エラーメッセージ
element click intercepted: Element <div class="hogehoge">...</div> is not clickable at point (415, 547). Other element would receive the click: <div class="hogehoge">...</div>
どういったページのどういった要素の抽出か掲載は可能でしょうか?
Pixivというイラスト投稿サイトになります。
該当ページは「イラストを複数枚投稿しているページ」になります。
例で挙げるのでしたら
https://www.pixiv.net/artworks/84888750
になります。
要素は、画像の2枚目以降の「<div class="sc-1mz6e1e-1 QBVJO">」です。
※ この要素を表示するためには【すべてを表示】ボタンを押下しないといけませんが・・・
この「<div class="sc-1mz6e1e-1 QBVJO">」が複数あるためエレメント指定の時に「[1]」や「[2]」といった指定が必要になります。
ここに書かれている外側に問題があるのでしょうね。
あるいは、実際のコードと質問のコードが違うか。
該当文を書き込むと長くなってしまいますので割愛します。
find_element_by_xpath に直接文字列を入力して実行できているので、外側に問題がある感じではないと思います
[すべて見る]押下→全ての画像を表示させ
2枚目以降の画像を1枚ずつ全てクリックしたいという事でしょうか?
はい。
ご指摘の処理を行いたいと思っています。
とりあえずは質問の本筋であるxpathの件については
文字列同士の結合や、文字列と変数の結合というのは特に問題はありません。
お書きの3通りは、どれも同じ動作なので、入れ替えて動かないのであれば、それ以外の部分に原因があることが明白です。
他の部分のコードがおかしいとは考えにくいので、実行の仕方とかですかね。
コード全文をファイルに書いて、「python ファイル名」で実行していますか?
nto さん
質問文の方にも追記しましたが、こちらがエラーメッセージになります。
element click intercepted: Element <div class="sc-1mz6e1e-1 QBVJO">...</div> is not clickable at point (415, 547). Other element would receive the click: <div class="rsntqo-0 jEtDYL">...</div>
otnさん
実行環境はVisualStudioなので「python ファイル名」といった実行ではなくVSの「デバッグ」で実行しています。
度重ね申し訳ございません、もう一つ確認なのですが、目的は画像のクリックでしょうか?
それとも自動で上下にスライドしてくれるボタン要素のクリックが目的でしょうか?
画像クリックが目的です。
回答1件
あなたの回答
tips
プレビュー