windowsでseleniumを使用してキャプチャを自動でとる

テストでキャプチャをとって結果として納品せよ。
と言われたので自動化してみました。

ブラウザによってちょっとずつ違うので備忘録。

ちなみに私はフロントエンドエンジニア（仮）でPythonなんて基本業務では使わないような、なんちゃって野郎です🫠

そもそも、Pythonとは？
seleniumとは？みたいなところはすっ飛ばします。

<br>

**やりたかったこと**
- pythonで自動でキャプチャをとる
- ヘッドレスモードでの実行


## windows Pythonインストール手順

１：pythonをダウンロード

https://apps.microsoft.com/store/detail/python-37/9NJ46SX7X90P?hl=ja-jp&gl=jp&activetab=pivot%3Aoverviewtab&rtc=1

上記でインストールすると、pipも併せてインストールされる。

２：`Python --version`でpythonのインストールができているか確認
３：`pip -V`でpipがインストールできているか確認
４：`pip install selenium`
５：`pip list`でseleniumがインストールできているか確認

## chorme
以下から自分が使用しているchromeのバージョンに一番近いものをクリック

https://sites.google.com/chromium.org/driver/downloads


「chromedriver_win32.zip」を選択
DLしたzipを解凍
chromedriver.exeというファイルを、実行ファイルと同階層に配置

### ソース

```
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# ブラウザーを起動
options = Options()
options.add_argument("--headless")  # headlessモードを使用する
options.add_argument("--disable-extensions")  # すべての拡張機能を無効にする。ユーザースクリプトも無効にする
options.add_argument("--incognito")  # シークレットモードで起動する

# オプションを指定しブラウザを起動
driver = webdriver.Chrome(executable_path="./chromedriver.exe", options=options)
driver.set_window_size(1300, 750)

# URLを開きスクショとる
driver.get("https://www.google.com/")
driver.save_screenshot("google.png")
```

## Edge

以下コマンド実行
```
pip install msedge-selenium-tools
```

自分のEdgeのバージョンを確認
一番近いバージョンのwebdriverを空以下からインストール

https://msedgewebdriverstorage.z22.web.core.windows.net/

自分のPCのbitに合わせたものをDL
解凍し、exeを実行ファイルと同階層に配置

### ソース

```
from selenium import webdriver
from msedge.selenium_tools import Edge, EdgeOptions

# ブラウザーを起動
options = EdgeOptions()
options.use_chromium = True
options.add_argument("--headless")
options.add_argument("--disable-extensions")  # すべての拡張機能を無効にする。ユーザースクリプトも無効にする
options.add_argument("--incognito")  # シークレットモードで起動する

# edgeDriverの引数にオプションを指定しブラウザを起動
driver_path = "./msedgedriver.exe"
driver = Edge(executable_path=driver_path, options=options)
driver.set_window_size(1300, 750)

# URLを開きスクショとる
driver.get("https://www.microsoft.com/ja-jp/")
driver.save_screenshot("microsoft.png")
```

chromeとOptionの指定方法が少々異なる。
EdgeでOption指定のためにpip installするのがやや面倒だが、上記でchromiumでの表示ではやりたいことは大体できてる


## Firefox

以下から最新のdriverをインストール

https://github.com/mozilla/geckodriver/releases

この記事制作時は以下が最新。
geckodriver-v0.32.2-win32.zip 

解凍して、exeを実行ファイルと同階層に配置

### ソース

```
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
import os

# ブラウザーを起動
options = Options()
options.binary_location = r"C:\Program Files\Mozilla Firefox\firefox.exe"
options.add_argument("--headless")  # headlessモードを使用する

# オプションを指定しブラウザを起動
path = os.getcwd()  # c:\users\user\desktop\test
firefox_driver_path = str(path) + "\driver\geckodriver.exe"
print(firefox_driver_path)
driver = webdriver.Firefox(executable_path=firefox_driver_path, options=options)
driver.set_window_size(1300, 750)

# URLを開きスクショとる
driver.get("https://www.mozilla.org/ja/")
driver.save_screenshot("mozilla.png")
```

Firefoxの場合、Firefox本体のexeのパスを指定しないとエラーになる👊🏻
解決方法は以下を参考

https://stackoverflow.com/questions/65318382/expected-browser-binary-location-but-unable-to-find-binary-in-default-location

## IE

今回のプロジェクトでは対象外なので除外

## Mac Safari

今回のプロジェクトでは対象だけどMacなので別途機会があれば追記します。