【Python】Webスクレイピング_Chromeの起動
2024年4月30日Python,Selenium
処理概要
- SeleniumとChromeDriverでブラウザ(Chrome)を操作する
- ChromeDriverはブラウザに適合するバージョンが自動で適用されるので事前ダウンロード不要
事前準備
必要なモジュールをpipでインストールする
pip install selenium
pip install chromedriver_binary_sync
ブラウザ操作のテストコード
import time
import chromedriver_binary_sync
from selenium import webdriver
from selenium.webdriver.chrome import service as fs
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
# ========================================
# 初期処理
# ========================================
# ChromeDriverをダウンロードしてパスを定数に格納する
CHROMEDRIVER = chromedriver_binary_sync.download(download_dir='chromedriver')
chrome_service = fs.Service(executable_path=CHROMEDRIVER)
# ========================================
# メイン処理
# ========================================
# ブラウザを起動する
driver = webdriver.Chrome(service=chrome_service)
# 指定するURLを開く
driver.get('https://www.google.com/')
# XPathで検索ボックスを特定する
search_box_xpath = '//*[@id="APjFqb"]'
driver.find_element(By.XPATH, search_box_xpath).send_keys('Selenium実践入門')
# NAMEで検索ボックスを特定して入力文字をクリアする
search_box_name = 'q'
driver.find_element(By.NAME, search_box_name).clear()
# 再度検索文字を入力して検索の3秒後にブラウザを閉じる
driver.find_element(By.XPATH, search_box_xpath).send_keys('Selenium実践入門' + Keys.RETURN)
time.sleep(3)
driver.quit()
オプションと起動時の設定の説明
chromedriver_binary_sync.download()
- ブラウザのバージョンに合わせたChromeDriverをダウンロードする
- ダウンロードフォルダの指定が可能
- 実行すると使用するChromeDriverのパスを返す
- 以前使用していた ChromeDriverManager().install() から変更
- 下記はダウンロードと同時に定数 CHROMEDRIVER に実行ファイルパスを格納する設定
CHROMEDRIVER = chromedriver_binary_sync.download(download_dir='chromedriver')
fs.Service(executable_path='ChromeDriverのパス')
- 実行時にChromeDriverのパスを指定するのが推奨となっている
- 指定しないと警告が表示されるので表示されないように設定する
- 下記は ChromeDriverManager().install() で返ってくるパスを格納した変数を使って設定している
chrome_service = fs.Service(executable_path=CHROMEDRIVER)
webdriver.ChromeOptions()
add_argument('--headless')
- ヘッドレスモードで起動する関数と引数
- ブラウザを表示させずにバックグラウンドで処理する
add_argument('--user-data-dir=' + PROFILE_PATH)
PROFILE_PATH = r'C:\Users\---\AppData\Local\Google\Chrome\User Data'
chrome_options.add_argument('--user-data-dir=' + PROFILE_PATH)
add_experimental_option('excludeSwitches', ['enable-automation'])
- ブラウザ起動時のテスト実行警告を非表示にする
- 指定しないとブラウザに以下のメッセージが表示される
Chrome は 自動テスト ソフトウェアによって制御されています。
add_experimental_option('excludeSwitches', ['enable-logging'])
- DevToolsのログを出力しない
- 指定しないとコンソールに以下のようなログが表示される
- 無視しても良いので非表示にする
DevTools listening on ws://127.0.0.1:52518/devtools/browser/85b4357a-7fc7-4969-a3f0-e6c235eecc03
>>> [8244:10016:1215/205133.795:ERROR:device_event_log_impl.cc(215)] [20:30:40.795] USB: usb_device_handle_win.cc:1045 Failed to read descriptor from node connection: システムに接続されたデバイスが機能していません。 (0x1F)
add_experimental_option('excludeSwitches', ['enable-automation', 'enable-logging'])
- 上記のテスト実行警告とDevToolsのログを非表示にする指定の仕方
add_experimental_option('prefs', {'download.default_directory': 'ディレクトリパス'})
webdriver.Chrome().implicitly_wait(XX)
各種オプションを指定したブラウザ操作のサンプルコード
import time
import chromedriver_binary_sync
from selenium import webdriver
from selenium.webdriver.chrome import service as fs
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
# ========================================
# 初期処理
# ========================================
# ChromeDriverをダウンロードしてパスを定数に格納する
CHROMEDRIVER = chromedriver_binary_sync.download(download_dir='chromedriver')
chrome_service = fs.Service(executable_path=CHROMEDRIVER)
# オプションを設定する
chrome_options = webdriver.ChromeOptions()
# ヘッドレスモードで起動する
chrome_options.add_argument('--headless')
# テスト実行警告とDevToolsのログを非表示
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation', 'enable-logging'])
# ファイルのダウンロードフォルダを指定する
dl_folder = 'C:\temp'
chrome_options.add_experimental_option('prefs', {'download.default_directory': dl_folder})
# ========================================
# メイン処理
# ========================================
# ブラウザを起動する
driver = webdriver.Chrome(service=chrome_service, options=chrome_options)
# ブラウザを最大化する
driver.maximize_window()
# 要素が見つかるまで最大10秒待つ設定
driver.implicitly_wait(10)
# 指定したURLを開く
driver.get('https://www.google.com/')
# XPathで検索ボックスを特定する
search_box_xpath = '//*[@id="APjFqb"]'
driver.find_element(By.XPATH, search_box_xpath).send_keys('Selenium実践入門')
# NAMEで検索ボックスを特定して入力文字をクリアする
search_box_name = 'q'
driver.find_element(By.NAME, search_box_name).clear()
# 再度検索文字を入力して検索の3秒後にブラウザを閉じる
driver.find_element(By.XPATH, search_box_xpath).send_keys('Selenium実践入門' + Keys.RETURN)
time.sleep(3)
driver.quit()