【Python】Webスクレイピング_Chromeの起動
処理概要
SeleniumとChrome Driverでブラウザ(Chrome)を操作する
ChromeDriverの事前準備不要
モジュールのインストール
- 必要なモジュールをpipでインストールする
pip install selenium pip install chromedriver_binary pip install chromedriver-binary-auto pip install webdriver-manager
ブラウザ操作のテストコード
- 動作テストコードの例
# ---------------------------------------- # モジュールのインポート # ---------------------------------------- import time import chromedriver_binary 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 from webdriver_manager.chrome import ChromeDriverManager # ---------------------------------------- # ChromeDriverの設定 # ---------------------------------------- CHROMEDRIVER = ChromeDriverManager().install() chrome_service = fs.Service(executable_path=CHROMEDRIVER) # ---------------------------------------- # 処理開始 # ---------------------------------------- # ブラウザを起動する driver = webdriver.Chrome(service=chrome_service) # 指定するURLを開く driver.get('https://www.google.com/') # XPathで検索ボックスを特定する search_box_xpath = '/html/body/div[1]/div[3]/form/div[1]/div[1]/div[1]/div/div[2]/input' 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()
オプションと起動時の設定の説明
ChromeDriverManager().install()
- ブラウザのバージョンに合わせたChromeDriverをインストールする
- 実行すると使用するChromeDriverのパスを返す
- 下記はインストールと同時に変数 CHROMEDRIVER に実行ファイルパスを格納する設定
CHROMEDRIVER = ChromeDriverManager().install()
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)
- 起動するChromeのアカウントを指定する
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 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 from webdriver_manager.chrome import ChromeDriverManager # ---------------------------------------- # ChromeDriverの設定 # ---------------------------------------- CHROMEDRIVER = ChromeDriverManager().install() 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 = '/html/body/div[1]/div[3]/form/div[1]/div[1]/div[1]/div/div[2]/input' 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()