developer.chrome.com
& "C:\Program Files\Google\Chrome\Application\chrome.exe" --headless --screenshot=C:\Users\noname\Pictures\sample.png https://google.com
- 気をつける点は、Powershellで外部プログラムを実行する場合には
&
(アンパサンド)を先頭につけること。chrome.exeのパスが文字列として認識されてしまい、エラーとなる。もしくは、Start-Processコマンドでプログラムを実行する方法でも良い。
オプションについて
--headless=new
- 上記公式ブログでは、新しいヘッドレスモードを利用するためには、
new
フラグを指定する必要があると書いてあるが、今回試したChrome 119では、フラグを指定すると逆に動かなかった。
- また同ブログにはフラグ無しだと、古いヘッドレスモードが起動するとあるものの、新しいヘッドレスモード用のオプションは使えたので、もしかしたらフラグの設定は不要になって、デフォルト動作が新しいヘッドレスモードになったのかもしれない。しらんけど。
--screenshot
- スクリーンショットを取得するオプション。このオプションと併用できる物として以下のものがある。
--window-size
--window-size=1920,1080
のように指定して、スクショのサイズを変更できる
--timeout
- ページのレンダリングを一定時間待ってからスクショを取るためのオプション
--print-to-pdf
- WebサイトをPDFとして保存するオプション
- Webサイトのフルサイズスクショを取りたい場合は、PDFとして出力したほうが良い。windows-sizeオプションでは絶対値で指定するので、足りなかったり余白が多くなったりしがち。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
url = "https://www.python.org"
driver.get(url)
page_width = driver.execute_script('return document.body.scrollWidth')
page_height = driver.execute_script('return document.body.scrollHeight')
driver.set_window_size(page_width, page_height)
filename = url.translate(str.maketrans({':': '_', '/': None})))
driver.save_screenshot(filename + '.png')
driver.quit()
- このプログラムでは、ページのフルサイズスクショを取得し、指定されたURLをファイル名として保存する。
- うーん、基本のコードなのであまり追加で説明することはない。実行環境は以下の通り。