経緯
pythonでスクレイピングのプログラムの依頼を受けてました。
とりあえず、プログラムが完成して、
依頼者のパソコンで試したところ、”ElementClickInterceptedException”というエラーが出てクリックできませんでした。
なので、今回、勉強しました。
seleniumは画面の外にある要素はクリックすることができない。
結論からいいますと、
「”selenium”は画面の外にある要素はクリックすることができない」というのが原因でした。
私のPCと依頼者のPCでは画面サイズが違っていて、そこが悪かったみたいです。
.execute_script()メソッドを使う
解決方法はJavaScriptのexecute.scriptメソッドを使うといいらしいです。
プログラムを書きます。「サイトに入って、ログインボタンをクリックする」という設定です。各importについては記述してません。
# Chromeを起動する browser = webdriver.Chrome(ChromeDriverManager().install()) browser.implicitly_wait(3) #サイトのログインページ入る browser.get("サイトのログインページのURL") browser.implicitly_wait(3) #ログインクリック login = browser.find_element(By.NAME,"action") browser.execute_script("arguments[0].click();", login) browser.implicitly_wait(3)
プログラムの説明をします。空白の行数は省略しています。
1~3行目、Chromeを起動して、”browser”という変数に入れています。
4~6行目、ログインページに飛んでいます。ログインページのURLを””の間に入れてください。
7~10行目は詳しく書きます。
7行目はコメントを書いています。
8行目にログインボタンの要素を取得するプログラムです。loginという変数に入れています。
私の場合は”action”というNAMEの要素でしたので、こんな書き方になっています。
9行目、ここでログインボタンをクリックしています。
私はここを「login.click()」と書いてしまっていて、エラーが出ました。
10行目は指定した要素が見つかるまでの待ち時間を設定しています。
こんな感じでできました。
参考になれば、幸いです。
ここまで読んでいただきありがとうございました。