mieki256's diary



2020/06/19(金) [n年前の日記]

#1 [python] Python+seleniumでWebブラウザを自動操作

十数ページほどWebページのスクリーンショットを撮ってサムネイル画像を作らなければいけなくて、手作業でキャプチャ作業をしていたのだけど。さすがにツラいなと。ある程度は作業を自動化したいなと。

Webブラウザを自動操作できる何かしらが無いものかとググってみたら、Python + selenium で Google Chrome 等を自動操作できると知り、ちょっと試してみようかと。環境は Windows10 x64 1909 + Python 3.7.7 64bit。

インストール作業。 :

selenium を pip でインストールする。
pip install selenium
selenium-3.141.0 がインストールされた。

Google Chrome を操作するためには、chromedriver が必要らしい。これも pip でインストールできるらしい。
pip install chromedriver-binary
chromedriver-binary-84.0.4147.30.0 がインストールされた。

chromedriver-path というコマンドで、chromedriver がインストールされた場所を表示できる。
> chromedriver-path
c:\python\python37-64\lib\site-packages\chromedriver_binary
環境変数 PATH に追加しておくことにする。今回は、ユーザ側の環境変数でいいかな…。

動作確認と再インストール。 :

IDLEを起動して試してみたけど。
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行ずつ試してみる。

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モード。おそらくどちらか片方だけを指定すれば済みそうな気もする…。

参考ページ。 :


以上、1 日分です。

過去ログ表示

Prev - 2020/06 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project