2020/06/19(金) [n年前の日記]
#1 [python] Python+seleniumでWebブラウザを自動操作
十数ページほどWebページのスクリーンショットを撮ってサムネイル画像を作らなければいけなくて、手作業でキャプチャ作業をしていたのだけど。さすがにツラいなと。ある程度は作業を自動化したいなと。
Webブラウザを自動操作できる何かしらが無いものかとググってみたら、Python + selenium で Google Chrome 等を自動操作できると知り、ちょっと試してみようかと。環境は Windows10 x64 1909 + Python 3.7.7 64bit。
Webブラウザを自動操作できる何かしらが無いものかとググってみたら、Python + selenium で Google Chrome 等を自動操作できると知り、ちょっと試してみようかと。環境は Windows10 x64 1909 + Python 3.7.7 64bit。
◎ インストール作業。 :
selenium を pip でインストールする。
Google Chrome を操作するためには、chromedriver が必要らしい。これも pip でインストールできるらしい。
chromedriver-path というコマンドで、chromedriver がインストールされた場所を表示できる。
pip install seleniumselenium-3.141.0 がインストールされた。
Google Chrome を操作するためには、chromedriver が必要らしい。これも pip でインストールできるらしい。
pip install chromedriver-binarychromedriver-binary-84.0.4147.30.0 がインストールされた。
chromedriver-path というコマンドで、chromedriver がインストールされた場所を表示できる。
> chromedriver-path c:\python\python37-64\lib\site-packages\chromedriver_binary環境変数 PATH に追加しておくことにする。今回は、ユーザ側の環境変数でいいかな…。
◎ 動作確認と再インストール。 :
IDLEを起動して試してみたけど。
仕方ないので、手動で version 83 用の chromedriver を入れる。まずは pip でインストールした chromedriver をアンインストール。
chromedriver をDLしてくる。
_Downloads - ChromeDriver - WebDriver for Chrome
chromedriver_win32.zip (83.0.4103.39版)をDLして解凍。中には chromedriver.exe が入っていた。今回は、D:\Dev\chromedriver\ に置いた。環境変数PATHにも通しておく。
コマンドプロンプトで chromedriver と打ち込んで、パスが通ってるか確認。
from selenium import webdriver driver = webdriver.Chrome()「この chromedriver は version 84 にしか対応してねえよ」と怒られた。自分の環境に入ってる Google Chrome は version 83 だった…。
仕方ないので、手動で version 83 用の chromedriver を入れる。まずは pip でインストールした chromedriver をアンインストール。
pip uninstall chromedriver-binary
chromedriver をDLしてくる。
_Downloads - ChromeDriver - WebDriver for Chrome
chromedriver_win32.zip (83.0.4103.39版)をDLして解凍。中には chromedriver.exe が入っていた。今回は、D:\Dev\chromedriver\ に置いた。環境変数PATHにも通しておく。
コマンドプロンプトで chromedriver と打ち込んで、パスが通ってるか確認。
> chromedriver Starting ChromeDriver 83.0.4103.39 (ccbf011cb2d2b19b506d844400483861342c20cd-refs/branch-heads/4103@{#416}) on port 9515 Only local connections are allowed. Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe. ChromeDriver was started successfully.パスは通っているっぽい。
◎ 再度動作確認。 :
IDLE上で、以下を1行ずつ試してみる。
Googleのページが開かれて、「chromedriver」で検索できた。動ているっぽい。
from selenium import webdriver driver = webdriver.Chrome() driver.get('https://www.google.com/') search_box = driver.find_element_by_name("q") search_box.send_keys('ChromeDriver') search_box.submit() driver.quit()
Googleのページが開かれて、「chromedriver」で検索できた。動ているっぽい。
◎ スクリーンショットを撮る記述をメモ。 :
URL群が入ったリストを使ってループして、各ページのスクリーンショットを撮るスクリプトは書けた。一応、スクリプトの中から、関係ありそうなところを抜き出してメモ。
from selenium import webdriver import time urls = [] # ... # urls.append([uri, imguri]) options = webdriver.ChromeOptions() options.add_argument('--disable-infobars') options.add_argument('--disable-extensions') options.add_argument('--start-maximized') if headless: options.add_argument('--headless') options.add_argument('--window-size=1920,1080') driver = webdriver.Chrome(options=options) driver.set_window_size(1920, 1080) else: options.add_argument('--kiosk') driver = webdriver.Chrome(options=options) # driver.maximize_window() for uri, imguri in urls: driver.get(uri) time.sleep(1) # driver.fullscreen_window() time.sleep(5) driver.save_screenshot(imguri) time.sleep(2) driver.close() driver.quit()
- driver.save_screenshot(ファイル名) で画像保存できる。ちなみに、Windows + Python でも「/」はパス区切り文字として使える。
- オプションで --start-maximized を指定すると最大化。--kiosk を指定すると kioskモード。おそらくどちらか片方だけを指定すれば済みそうな気もする…。
◎ 参考ページ。 :
_PythonでSeleniumを使ってスクレイピング (基礎) - Qiita
_Python + Selenium で Chrome の自動操作を一通り - Qiita
_Downloads - ChromeDriver - WebDriver for Chrome
_【完全版】PythonとSeleniumでブラウザを自動操作(クローリング/スクレイピング)するチートシート | たぬハック
_【広報担当者向け】複数のWEBニュースを自動キャプチャする方法【働き方改革】 | 広報・PR支援の株式会社ガーオン
Google Chrome の --disable-infobars オプションは削除されたという話もあるようで…。実際、指定してみても、infobars は消えてくれなかった。
_automated testing - How to disable infobar from Chrome - Software Quality Assurance & Testing Stack Exchange
_Python + Selenium で Chrome の自動操作を一通り - Qiita
_Downloads - ChromeDriver - WebDriver for Chrome
_【完全版】PythonとSeleniumでブラウザを自動操作(クローリング/スクレイピング)するチートシート | たぬハック
_【広報担当者向け】複数のWEBニュースを自動キャプチャする方法【働き方改革】 | 広報・PR支援の株式会社ガーオン
Google Chrome の --disable-infobars オプションは削除されたという話もあるようで…。実際、指定してみても、infobars は消えてくれなかった。
_automated testing - How to disable infobar from Chrome - Software Quality Assurance & Testing Stack Exchange
[ ツッコむ ]
以上、1 日分です。