PythonでWebDriverのインストールを自動化したり補助するモジュールまとめ

#PythonでWebDriverのインストールを補助するモジュールまとめ

Seleniumなどでスクレイピングする際、WebDriverのバージョンが異なると動かなかないことがあったりするので、勝手にバージョン合わせてくれるモジュールないかなと探してまとめました。
5/27/2022 追記　現在はDocker imageを使ったほうが無難です。Docker CLIは現在も無料で使用することができるので可能ならそちらを使いましょう。


# Chrome用
## [chromedriver-autoinstaller](https://github.com/yeongbin-jo/python-chromedriver-autoinstaller)

+ ライセンス:MIT  
+ 対応OS:Widows/Mac/Linux  

### インストール方法

```console
pip install chromedriver-autoinstaller
```

### 使い方  
以下を実行するコードに追加

```python
from selenium import webdriver
import chromedriver_autoinstaller

chromedriver_autoinstaller.install()  
```
### 説明
適切なバージョンのchromedriverが存在するか確認して存在しないならバージョンがあっているものをインストール

```python
def install(cwd=False):
    """
    Appends the directory of the chromedriver binary file to PATH.
    :param cwd: Flag indicating whether to download to current working directory
    :return: The file path of chromedriver
    """
def get_chrome_version():
    """
    Get installed version of chrome on client
    :return: The version of chrome
    """
```
## [chromedriver-py](https://github.com/breuerfelix/chromedriver-py)
自動で最新のchromedriverバイナリバージョンをダウンロードしてインストールするらしい

+ ライセンス:MIT  
+ 対応OS:Windows/Linux/macOS  

### インストール方法

```console
 pip install chromedriver-py
 ```

### 使い方  
``from chromedriver_py import binary_path``を追加すると``binary_path``にChrome driverのパスが代入される
自動で最新版にアップデートされるらしい

```python
from selenium import webdriver
from chromedriver_py import binary_path # this will get you the path variable

driver = webdriver.Chrome(executable_path=binary_path)

driver.get("http://www.python.org")
assert "Python" in driver.title
```
## [ChromeDriver Installer for Python](https://github.com/authomatic/chromedriver_installer)
なんか読んでて使いにくそうなので省略

## インストール

```console
pip install chromedriver_installer \
    --install-option="--chromedriver-version=2.10"
```
こんな感じでドライバーをインストールしてpathを通す機能シンプルなもの

---------------------------------------------

# Firefox
## [geckodriver-autoinstaller](https://github.com/yeongbin-jo/python-geckodriver-autoinstaller)
自動でgeckodriverをインストールしてくれるスクリプト

+ ライセンス:MIT
+ 対応OS Windows/Linux/macOS

### インストール

```console
pip install geckodriver-autoinstaller
```

### 使い方
``import geckodriver_autoinstaller``を使いたいコードに追加し``geckodriver_autoinstaller.install() ``
を追加

```python
from selenium import webdriver
import geckodriver_autoinstaller

geckodriver_autoinstaller.install() 
# Check if the current version of geckodriver exists
# and if it doesn't exist, download it automatically,
# then add geckodriver to path
driver = webdriver.Firefox()
driver.get("http://www.python.org")
assert "Python" in driver.title
```
### 説明
適切なバージョンのgeckodriverが存在するか確認して存在しないならバージョンがあっているものをインストール

```python
def install(cwd=False):
    """
    Appends the directory of the geckodriver binary file to PATH.
    :param cwd: Flag indicating whether to download to current working directory
    :return: The file path of geckodriver
    """
def get_firefox_version():
    """
    Get installed version of chrome on client
    :return: The version of chrome
    """
```
## [pygeckodriver](https://github.com/parklam/pygeckodriver)
1時間ごとに自動でgeckodriverの更新があるかチェックしあったらインストールしてくれるスクリプト

+ ライセンス:Apache-2.0
+ 対応OS:windows/Mac/linux

## インストール

```console
pip install pygeckodriver
```

## 使いかた
``pygeckodriver import geckodriver_path``を追加すると``geckodriver_path``にgeckodriverのパスが入る

```python
from selenium import webdriver
from pygeckodriver import geckodriver_path

bs = webdriver.Firefox(executable_path=geckodriver_path)
bs.get('https://www.pypi.org')
```


---------------------------------------------

# 総合
## [Pyderman](https://github.com/shadowmoose/pyderman)

+ ライセンス:MIT  
+ 対応OS:Windows/Linux/macOS  
+ Python 3.5以上  
+ 対応ブラウザ  
 Google Chrome (chromeDriver)  
 Firefox (geckoDriver)  
 PhantomJS  
 Opera (operaDriver)  
 Edge (edgeDriver)  

### インストール

 ```console
 pip install pyderman
 ```

### 使い方(Firefox)

```python
import pyderman as driver
# FIrefoxのドライバーをインストール
path = driver.install(browser=driver.firefox)
print('インストールされた geckodriver driver のパスは: %s' % path)
```

### 説明
指定されたブラウザのドライバをダウンロードし、保存先のパスを返す

```python
def install(browser=None, file_directory='./lib/', verbose=True, chmod=True, overwrite=False, version='latest', filename=None, return_info=False):
	"""
	Downloads the given browser driver, and returns the path it was saved to.
	:param browser: The Driver to download. Pass as `pyderman.chrome/firefox`. Default Chrome.
	:param file_directory: The directory to save the driver.
	:param verbose: If printouts are okay during downloading.
	:param chmod: If True, attempt to make the downloaded driver executable.
	:param overwrite: If true, overwrite existing drivers of the same version.
	:param version: The version to download. Default 'latest'.
	:param filename: The filename to save the driver to. Defaults to driver-specific.
	:param return_info: If True, return an Object with more download information.
	:return: The absolute path of the downloaded driver, or None if something failed.
	"""
```

### 注意点
Edgeは実験的なコードなのでバージョンを指定したほうがいいらしい

## [Webdriver Manager for Python](https://github.com/SergeyPirogov/webdriver_manager)
さまざまなブラウザのドライバーの管理を簡単にするスクリプト

+ ライセンス:Apache-2.0
+ 対応OS:Windows/Linux/macOS  
+ 対応ブラウザ  
 Google Chrome (chromeDriver)  
 Firefox (geckoDriver)  
 Opera (operaDriver)  
 Edge (edgeDriver)  

### インストール

```console
pip install webdriver_manager
```
### 使い方

今まではdriverを更新があるたびに手でダウンロードしChromeなら次のような感じでパスなどを設定していたのを

```python:これまで
webdriver.Chrome('/home/user/drivers/chromedriver')
ChromeDriverManager(path=custom_path).install()
```
かわりに 

```python:Chrome
from webdriver_manager.chrome import ChromeDriverManager

webdriver.Chrome(ChromeDriverManager().install())
```
こんな感じになる  
Firefox

```python:Firefox
from webdriver_manager.firefox import GeckoDriverManager

driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
```
IE

```python:IE
from webdriver_manager.microsoft import IEDriverManager

driver = webdriver.Ie(IEDriverManager().install())
```
Opera

```python:Opera
from webdriver_manager.opera import OperaDriverManager

driver = webdriver.Opera(executable_path=OperaDriverManager().install())
```

## [Webdriver Controller](https://github.com/lcmtwn/webdriver_controller)

webドライバーを管理するCLIツール？

+ ライセンス:MIT
+ 対応OS:Linux/macOS  
+ Python 3.5+
+ 対応ブラウザ  
 Google Chrome (chromeDriver)  
 Firefox (geckoDriver)  

### インストール

```console
pip install webdriver_controller
```
### 使い方

```bash
webdriver_controller [-h] {download,cleanup,list,start} ...
Webdriver controller
positional arguments:
  {download,cleanup,list,start}
    download          Webdriver のバイナリをダウンロード
    cleanup           Webdriver のバイナリを削除
    list              ダウンロードしたWebdriverのリストを表示
    start             Selenium を開始

optional arguments:
  -h, --help          このヘルプメッセージ(原文)を表示
```

## [webdriverdownloader](https://github.com/leonidessaguisagjr/webdriverdownloader)

+ ライセンス:MIT
+ 対応OS:Windows/Linux/macOS  
+ python: 2.7.16 or 3.8
+ 対応ブラウザ  
 Google Chrome (chromeDriver)  
 Firefox (geckoDriver)  
 Opera (operaDriver)  

### インストール

```console
pip install webdriverdownloader
```
### 使い方
Firefox

```python:Firedox
from webdriverdownloader import GeckoDriverDownloader
# 最新版をインストール
gdd = GeckoDriverDownloader()
# v0.20.0版をインストール
gdd.download_and_install("v0.20.0")
```

Chrome

```python:Chrome
from webdriverdownloader import  ChromeDriverDownloader
# 最新版をインストール
gdd =  ChromeDriverDownloader()
# v0.20.0版をインストール
gdd.download_and_install("v0.20.0")
```
Opera(Chromiumベース)

```python:Opera(Chromiumベース)
from webdriverdownloader import  OperaChromiumDriverDownloader
# 最新版をインストール
gdd =  OperaChromiumDriverDownloader()
# v0.20.0版をインストール
gdd.download_and_install("v0.20.0")
```
#### CLIツールとしての使い方

```console
webdriverdownloader browser：version 
```
Chromeの2.38, Firefoxの最新版, operaのv2.35をインストール場合

```console:example
webdriverdownloader chrome:2.38 firefox opera:v.2.35
```
## [webdrivermanager](https://github.com/rasjani/webdrivermanager)

<!--
一つ上のフォーク？
使い方やcliのコマンドは同じだった
ソースコードは微妙に違う
-->

WebDriverバイナリの最新バージョン（または特定のバージョン）を自動的に検索およびダウンロードしてパスを通してくれるスクリプト
webdriverdownloaderと使い方が現在のところ(2020/3/12)同じ

+ ライセンス:MIT
+ 対応OS:Windows/Linux/macOS  
+ python:2.7.15 or 3.7
+ 対応ブラウザ  
 Google Chrome (chromeDriver)  
 Firefox (geckoDriver)  
 Opera (operaDriver)  
 Edge (edgeDriver)  

### インストール

```console
pip install webdrivermanager
```
### 使い方
Firefox

```python:Firedox
from webdriverdownloader import GeckoDriverDownloader
# 最新版をインストール
gdd = GeckoDriverDownloader()
# v0.20.0版をインストール
gdd.download_and_install("v0.20.0")
```
Chrome

```python:Chrome
from webdriverdownloader import  ChromeDriverDownloader
# 最新版をインストール
gdd =  ChromeDriverDownloader()
# v0.20.0版をインストール
gdd.download_and_install("v0.20.0")
```
Opera(Chromiumベース)

```python:Opera(Chromiumベース)
from webdriverdownloader import  OperaChromiumDriverDownloader
# 最新版をインストール
gdd =  OperaChromiumDriverDownloader()
# v0.20.0版をインストール
gdd.download_and_install("v0.20.0")
```

#### CLIツールとしての使い方

```console
webdriverdownloader browser：version 
```
Chromeの2.38, Firefoxの最新版, operaのv2.35をインストールした場合

```console:example
webdriverdownloader chrome:2.38 firefox opera:v.2.35
```