WEBサイトのクローリングに利用するSeleniumの初期設定と利用方法についてご紹介。
初期設定
seleniumのライブラリをインストール
pip install selenium
#conda install selenium #anaconda利用時
chromedriverをダウンロード
「Chromeの設定 > Chrome について」から現在利用中のchromeのバージョンを確認する。
「ChromeDriver」から利用中のバージョンのに応じた(近いもの)をダウンロード
https://chromedriver.chromium.org/downloads
実行
シンプルな利用方法
シンプルにYahoo!のトップページを表示する方法
from selenium import webdriver
driver_path = 'C:/Users/XXXXX/chromedriver.exe' #Chromedriverの保存先を指定
driver = webdriver.Chrome(executable_path = driver_path )
url = 'https://www.yahoo.co.jp/' #対象のURLを指定
driver.get(url)
ネットではdriver部分をbrouserにしている方もいるが、別にどちらでも良い
設定を追加する
「webdriver.ChromeOptions」でchromeの挙動を設定することができる
ダウンロード先のフォルダを指定する場合
デフォルトではChromeの設定と同じくダウンロードフォルダが指定されているが、個別にクローリングしたデータをダウンロードフォルダと分けて分析用のフォルダに格納したい場合など。
from selenium.webdriver.chrome.options import Options
driver_path = 'C:/Users/XXXXX/chromedriver.exe' #Chromedriverの保存先を指定
options = webdriver.ChromeOptions()
#ダウンロードの保存先を指定する場合
prefs = {"download.default_directory" : r'C:\Users\XXXXXX\download'}
options.add_experimental_option("prefs",prefs)
driver = webdriver.Chrome(executable_path = driver_path , options = options)
ユーザーエージェントを指定する場合
通常のブラウザでないと操作を受け付けないなど対象のサイト側で制限がかかっているときにユーザーエージェントを偽装する方法。
#ユーザーエージェントを指定する場合
UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
options.add_argument('--user-agent=' + UA)
現在利用中のブラウザの設定を確認するには、chromeのURL欄に「chrome://version/」を入力することで確認できる
ポップアップを許可する場合
デフォルトではポップアップブロッキングが有効となっているため、設定をdisableに変更する
options.add_argument('--disable-popup-blocking')
エラー発生時の対応
パスが通っていない場合
Chromedriverの保存先にパスを通していないと以下のエラーメッセージが表示される場合があります。
selenium.common.exceptions.WebDriverException: Message: ‘chromedriver’ executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home
下記のコードを実行することでパスを通すことができます
import sys
sys.path.append('C:/Users/XXXXX')
user data directory is already in use
下記のエラーメッセージが表示される場合、通常使っているユーザーディレクトリと重複するため別の物を指定する必要がある。
“message”: “Message: invalid argument: user data directory is already in use, please specify a unique value for –user-data-dir argument, or don’t use –user-data-dir\n”,
対処法は下記の通りchrome.optionsで対応する
from selenium.webdriver.chrome.options import Options
options = webdriver.ChromeOptions()
# ① ユーザーディレクトリを作成して指定する
options.add_argument('--user-data-dir = C:/Users/XXXXX/User Data')
options.add_argument('--profile-directory = Profile1')
# ② (①でダメだった場合)、ヘッドレスモードで起動する
options.add_argument('--headless')
# ③ (②でダメだった場合)sandboxを無効にする
options.add_argument("--no-sandbox")
options.add_experimental_option("prefs",prefs)
ヘッドレスモードはブラウザを非表示とするモードのため、どの画面を表示しているか見えませんが、裏でブラウザが起動しているものになります。
v4系での記述方法
最新バージョンではwebdriverの読み込み方法が変わったのでエラーが発生します。Serviceとしてexecutable_pathを返す必要があります。
TypeError: WebDriver.__init__() got an unexpected keyword argument ‘executable_path’
#v3系での記述
driver = webdriver.Chrome(executable_path = driver_path)
#v4以降での記述
service = Service(executable_path = driver_path)
driver = webdriver.Chrome(service = service)