SeleniumでECサイトや有名なSNSをスクレイピングしようとするとCLOUDFLAREというセキュリティーサービスのBOT検知に引っ掛かりユーザー認証の画面に飛ばされることがあると思います
その回避方法はいろいろあるのですが、今回はDrissionPageというライブラリを使ってCloudFlareの認証を回避してスクレイピングを行う方法について紹介していきます
前準備
まずは以下のコマンドでライブラリをインストールします
$ pip install drissionpage
プロジェクトの概要については下記を参照してください
Gitのurl:https://github.com/g1879/DrissionPage/tree/master
Seleniumとの比較
Selenium使用例
もう当たり前だと思いますがseleniumではブラウザを起動してサイトにアクセスする処理は以下のように記述します。
from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.chrome.service import Service service = Service(ChromeDriverManager().install()) driver = webdriver.Chrome(service=service) driver.get("取得したいページのURL") html = driver.page_source
DrissionPage使用例
一方DrissionPageではブラウザを起動してサイトにアクセスする処理は以下のように記述します。
方言みたいな感じではありますが、若干書き方が異なるので注意してください
from DrissionPage import ChromiumPage page = ChromiumPage() page.get("取得したいページのURL") html_content = page.html page.quit()
要素の指定
DrissionPageでの要素の指定はSELENIUMのBYメソッドを流用します。
具体的には(指定する方法,指定する要素名)でtupleを作成し、それを.ele()というメソッドに引数として投げるイメージです
<サンプルコード>
from selenium.webdriver.common.by import By loc2 = By.XPATH,'/html/body/div[1]/div[2]/div/div/div[2]/div/div[2]/div/div/div[4]/p' test = page.ele(loc2) print(text.text) # 要素内のテキストを取得
要素のクリック
DrissionPageでの要素のクリックは以下のような感じです。要素の指定については上述した通りで、クリックは従来のseleniumと同じ.click()で行います
loc = By.XPATH,"/html/body/div[1]/div[2]/div/div/div[2]/div/div[1]/div/div/div/div[2]/div/div[2]/input" test = page.ele(loc) test.click()
終わり
ここでは基本的な追加方を紹介しました。タブの切り替えやIFRAME云々やスクロールのやり方については下記のドキュメントに記載されておりますのでそちらを参考にしてください。では~
Gitのurl:https://github.com/g1879/DrissionPage/tree/master
コメント