プログラミング

【Python】スクレイピングでクリックできないときに試すこと【Selenium】

はじめに

こんにちは。SeleniumでWebスクレイピングをしていると、click関数でボタンやリンクをクリックしてもイベントが発火しないことがあります。

driver.find_element(By.**, “xxx”).click()

こういった場合の対処方法をまとめたので、備忘録として残しておきます。

chromeDriver の状態

options = Options()
options.add_argument(“--headless”)
driver = webdriver.Chrome(get_driver_path(), chrome_options=options)
driver.get(“https://xxx.com”)

対処法

1. 画面内に要素を表示させてクリック

driverでWebページを開いたときに、スクロールしないと表示されない位置にある要素をクリックしようとしていた場合、解決する可能性があります。

まずはスクショを撮って現状を把握します。

driver.save_screenshot("save_image_path")

スクショを撮った結果表示されていない場合の対処法は2つあります。

まずはウィンドウサイズを大きくする方法です。

driver.set_window_size(1920, 1080)

次は指定の位置までスクロールします。

例ではページの一番下までスクロールしています。

driver.execute_script(“window.scrollTo(0, document.body.scrollHeight);“)

上記を実行後再度スクショを撮り、表示されていることを確認した後にクリックすると、解決する場合があります。

2. サブミットする

ボタンのtypeがsubmitの場合、submit関数を直接呼び出すことで、解決する可能性があります。

<button type='submit'>submit ボタン</button>

やり方

driver.find_element(By.**, “xxx”).submit()

3. Enter キーを押す

上記と同じようにボタンのtypeがsubmitの場合、Enterキーを押します。

driver.find_element(By.**, “xxx”).send_keys(Keys.ENTER)

4. element の絶対位置を指定してクリック

クリックしたい要素の位置を取得し、座標指定でクリックします。

# 要素を取得
element = driver.find_element(By.**, “”)

# 座標を取得
loc = element.location
x, y = loc[“x”], loc[“y”]

# 座標指定でクリック
actions = ActionChains(driver)
actions.move_by_offset(x, y)
actions.click()
actions.perform()

ここからはdriver.execute_scriptでスクリプトを書いて実行する方法です。

5. 要素 のクリックを行うスクリプトを実行

ボタンをクリックするスクリプトを実行する方法です。

driver.execute_script(“arguments[0].click();“, driver.find_element(By.**, “”))

6. 要素 に埋め込まれているイベントを直接実行

driver.execute_script(“embedded_script”)

7. イベントと同じような処理を行うスクリプトを無理やり記述して実行

どうしてもできない場合は、WebページのHTMLを読み、submit関数で行っていることと同じようなスクリプトを愚直に記述して実行します。

driver.execute_script(“customize_script1")
driver.execute_script(“customize_script2”)
driver.execute_script(“customize_script3")
driver.execute_script(“customize_script4”)

  • この記事を書いた人
  • 最新記事

おみ

プログラミング学習やキャリアのことを発信していきます。【経歴】1999年生まれ。専門学校卒業後、大手企業やベンチャー企業でSEとして勤務。現在は某メガベンチャーでFlutterエンジニアとして働いています。

-プログラミング
-, ,