最新のChromedriverの設定　vol.2

この記事はWebclassの更新を調べるツール開発　vol.1

https://qiita.com/Chronos/items/32c1ce23ed4dc3716e8f

の続編vol.2です。
seleniumでChromedriver使いたい方、Chromedriverのインポートエラーになる方向けの内容です。
***
# seleniumのダウンロード
　これは比較的記事も多いので簡単に。
 Python自身の標準ライブラリにseleniumは含まれていないので別途ダウンロードする必要があります。王道の指令や演算（例えばprint文とか四則演算とか）は標準ライブラリだけでこなせます。
 
　別途ダウンロードするライブラリは、キーボードのWindows+Rで、cmd（意味はコマンド）を入力して、公式配布版のPythonを使用中の場合、`pip install selenium（ライブラリ名）`を入力してEnterでダウンロードを行うことができます。

 記事執筆時点ではvar.4.18が最新版としてダウンロードされます。
 
# Chromedriverについてリサーチ
Chromedriverのダウンロードを調べていると大事そうなことは、3点ほど
* 自分の使っているChromeとバージョンを合わせろ
* そのバージョンにあったdriverをダウンロード
* 定期的にChromedriverのバージョンを気にして更新しないと、最悪動かなくなる


　大体の記事がこの話をしていると思います。間違いでは無いですが結果的に言うと、色々とChromedriverの仕様が変わっているらしいので、最新の記事を参考にしたほうがいいです。


# 実際にダウンロード
 :::note warn

実際のダウンロードをしようとされている方は、先にこの記事を下まで読んでからやった方が良いです。本当に！
:::

　まずダウンロードは、全然Google公式感がないここからできます。

 https://chromedriver.chromium.org/downloads

 この記事を書いている時点でのChromeの最新版は122.xxなのですが、115.xxくらいまではトップページにわかりやすいダウンロードボタンがあったらしいのですが、今現在はトップページにダウンロードボタンはありません。写真の矢印が指している下線部からダウンロードページに行きつけます。
 
![IMG_2613.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718653/4ca75edb-56fc-e955-87b4-38c9db3003c6.jpeg)

　そうしたら自分のChromeのバージョンに合う安定版を探します。
 私のPCはWindows11の64ビットなんですが、クロームドライブの場合は64ビットの人も32ビット版をダウンロードするらしいです。

 ![IMG_2616.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718653/ae2089f3-2b75-6c75-c03d-26de9a266918.jpeg)

　ダウンロードは、該当URLをそのままブラウザに貼り付ければzipファイルがダウンロードできます。


 # Python環境にインポート　
　早速.pyファイルに`from selenium import webdriver`と書いて、早速ドライバーを宣言してみます。`driver = webdriver.Chrome(#ダウンロードしたChromedriverの実行ファイルのパス)`と書いたのですが、私の場合この書き方だとずっとエラーでした。
　エラーメッセージと現状をGPT-4に入れて聞いてみたり、色々サーチして解決したのが、環境変数の設定でダウンロードしたChromedriverの実行ファイルのパスを追加してみることです。そしてコードでは`driver = webdriver.Chrome()`と場所を宣言しないことで動きました。これを解決するにが地味に1番時間がかかりました。
 　
  このエラーがなくなればあとは勝ちです。
  `driver.get('#見たいサイトのURL')`と書いて実行すれば、指定したサイトが自動で開きます。

# まさかの事実
　この記事は、諸々の開発が終わってから備忘録的な意味を込めて書いているのですが、Chromedriverに関する重要なことが後々判明しました。
 
**Chromedriverの手動ダウンロードも、パス設定も今はいらない！！**

　念の為もう一度、

**Chromedriverの手動ダウンロードも、パス設定も今はいらない！！**

>【Windows・Mac共通】
>
> Seleniumバージョン4.6以上ならこれ↓だけでOK。
>```py:Python
>from selenium import webdriver
>
>driver = webdriver.Chrome()
>```
>(中略)
>
>Selenium 4.6から、Selenium自体にChromeDriver自動更新機能「Selenium Manager」が搭載されたことで、このシンプルな記述だけで済むようなりました。

　上記はこちらの記事からの引用です。

https://yuki.world/python-selenium-chromedriver-auto-update/

記事冒頭で述べた重要な3点

* ~~自分の使っているChromeとバージョンを合わせろ~~ 
* ~~そのバージョンにあったdriverをダウンロード~~ 
* ~~定期的にChromedriverのバージョンを気にして更新しないと、最悪動かなくなる~~ 

　全てselenium自身が自動化してくれるようになったそうです。1番手間取った工程は無意味でした...(補足しておくと、このおかげで完成したプログラムを実行ファイル化する時に、Chromedriverのバージョンアップデート関係を一切気にする必要がなくなり凄く楽になりました。) 

 (補足) 手動ダウンロードしたchromedriverが最新版でないとエラーになることがあるので、手動ダウンロード版の実行ファイルは削除することをオススメします。

　seleniumのコード自体は資料がネット上に大量にあるのでそこまで困らないと思います。
　困ったらGPT-4にやりたいことと開発環境を伝え、具体的なコードを聞きだし、それを下に解説記事や公式ドキュメントを参照すれば、理解もできて書き方も分かるはずです。

 ***
**おまけ**
　次の記事に書こうと思ったのですが、seleniumの記法をネットで調べる際の注意を書き留めておきます。やっと環境構築が終わった人には何のこっちゃの話なので無視してください。
　seleniumのコードを検索していると時々selenium3.x系の記法が使われている場合があり、selenium4.x系では一部記法が変わっているので、そういったエラーで躓くかもしれません。私もその違いに一瞬惑わされました...
```py:selenium3.x系の例
driver.findElementById("elementId");
```
```py:selenium4.x系の例
driver.findElement(By.id("elementId"));
```
　要素の指定方法が変わったわけですが、注意ポイントは引数として渡される括弧内の`By`は関数名では無くなったので次のようなインポートが必要です。
```py:selenium4.x系で必要なインポート文
 from selenium.webdriver.common.by import By
 ```
　これがfind系のプログラムは全部エラーになるので、スクレイピング目的でselenium使う人はおまじないだと思ってとりあえず冒頭で宣言しておくべきだと思います。あんまり他の記事でも強調されてませんでした。実際困ったらAIに聞けばすぐ教えてくれますが...

 ***
 
 次記事に続きます。
 
 https://qiita.com/Chronos2500/items/642a99ec96ad5ab3f1b0