0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Selenium使用】超シンプルにreCHAPCHAを突破する方法

Posted at

はじめに

↓のような、reCHAPCHAクリック が求められるサイトをWebクローリング・スクレイピングする際の突破方法を記します。

今回は、オークファン を例にします。

初めてWebクローリング・スクレイピングする方は、事前準備から、
慣れている方は、いよいよ突破をご拝読ください。

また、全体のコードのみ見たい方は、全体のコード から。

全体のコード

全体のコード
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver_path = './chromedriver-win64/chromedriver.exe'
service = Service(driver_path)
driver = webdriver.Chrome(service=service)

driver.get('https://aucfan.com/member/myaucfan')

# ページが完全に読み込まれるまで待機
driver.implicitly_wait(10)
# `wait`を作成(最大10秒待機)
wait = WebDriverWait(driver, 10) 

# reCAPTCHA「私はロボットではありません」のチェックボックスをクリック
captcha_checkbox = wait.until(
    EC.element_to_be_clickable(
        (By.CLASS_NAME, 'recaptcha-checkbox-checkmark')
        )
    )
    
captcha_checkbox.click()

事前準備

必要ライブラリをインポートします。
今回は、Selenium(ブラウザを自動化するツール)と, ChromeDriver(Google Chromeブラウザを操作)を用います。

chromedriver.exeのダウンロード

chromedriver.exeをダウンロードします。

この際、ChromeブラウザとChromeDriverのバージョンが一致していることを確認してください。
Chromeブラウザのバージョンは~で確認できます。

必要ライブラリのインポート

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driverオブジェクトの作成

chromedriver.exeの位置をdriver_pathを用いて、相対パス で指定します。

driver_path = './chromedriver-win64/chromedriver.exe'

ChromeDriver(ブラウザを操作するための実行ファイル) のパスをServiceクラスに指定します。

service = Service(driver_path)

Chromeブラウザを起動 し、これを操作するためのdriverオブジェクトを作成します。

driver = webdriver.Chrome(service=service)

ここまで出来たら、事前準備の完成です。

いよいよ突破

  • まずはアクセスしたいページを開きます。
driver.get('https://aucfan.com/member/myaucfan')

この際、しっかり検索ページが開かれるのを待つため↓コードを加えることを忘れないようにしましょう。(これをしないと、対象Webサイトに多大な負担をかけてしまい大問題に発展しかねません。)

# ページが完全に読み込まれるまで待機
driver.implicitly_wait(10) 

すると、今回の例では、↓のような画面に遷移します。

では、いよいよreCAPTCHAの突破です。

  • reCHAPTCHA部分のHTML構造を分析する
    Fn+F12or F12 or 右クリック検証をクリックし、デベロッパーページを開きます。

reCHAPTCHAのチェックボックスはclass_namerecaptcha-checkbox-checkmark<div>タグで囲まれていることがわかります。

よって↓のように記述します。

# `wait`を作成(最大10秒待機)
wait = WebDriverWait(driver, 10) 

# reCAPTCHA「私はロボットではありません」のチェックボックスをクリック
captcha_checkbox = wait.until(
    EC.element_to_be_clickable(
        (By.CLASS_NAME, 'recaptcha-checkbox-checkmark')
        )
    )

ここでは、
クリック可能なreCAPTCHAのチェックボックス要素を取得し、変数 captcha_checkbox に格納します。

※コードの説明
wait.until

  • reCAPTCHAのチェックボックスがクリック可能になるまで待機します。

(By.CLASS_NAME, 'recaptcha-checkbox-checkmark'):

  • 要素をclass名で指定しています。
  • By.CLASS_NAME は要素の検索方法で、指定されたクラス名 recaptcha-checkbox-checkmark に一致する要素を探します。

そして、チェックボックスをクリックします。

captcha_checkbox.click()
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?