この記事はWebclassの更新を調べるツール開発 vol.1
の続編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の仕様が変わっているらしいので、最新の記事を参考にしたほうがいいです。
実際にダウンロード
実際のダウンロードをしようとされている方は、先にこの記事を下まで読んでからやった方が良いです。本当に!
まずダウンロードは、全然Google公式感がないここからできます。
この記事を書いている時点でのChromeの最新版は122.xxなのですが、115.xxくらいまではトップページにわかりやすいダウンロードボタンがあったらしいのですが、今現在はトップページにダウンロードボタンはありません。写真の矢印が指している下線部からダウンロードページに行きつけます。
そうしたら自分のChromeのバージョンに合う安定版を探します。
私のPCはWindows11の64ビットなんですが、クロームドライブの場合は64ビットの人も32ビット版をダウンロードするらしいです。
ダウンロードは、該当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。
Pythonfrom selenium import webdriver driver = webdriver.Chrome()
(中略)
Selenium 4.6から、Selenium自体にChromeDriver自動更新機能「Selenium Manager」が搭載されたことで、このシンプルな記述だけで済むようなりました。
上記はこちらの記事からの引用です。
記事冒頭で述べた重要な3点
自分の使っているChromeとバージョンを合わせろそのバージョンにあったdriverをダウンロード定期的にChromedriverのバージョンを気にして更新しないと、最悪動かなくなる
全てselenium自身が自動化してくれるようになったそうです。1番手間取った工程は無意味でした...(補足しておくと、このおかげで完成したプログラムを実行ファイル化する時に、Chromedriverのバージョンアップデート関係を一切気にする必要がなくなり凄く楽になりました。)
(補足) 手動ダウンロードしたchromedriverが最新版でないとエラーになることがあるので、手動ダウンロード版の実行ファイルは削除することをオススメします。
seleniumのコード自体は資料がネット上に大量にあるのでそこまで困らないと思います。
困ったらGPT-4にやりたいことと開発環境を伝え、具体的なコードを聞きだし、それを下に解説記事や公式ドキュメントを参照すれば、理解もできて書き方も分かるはずです。
おまけ
次の記事に書こうと思ったのですが、seleniumの記法をネットで調べる際の注意を書き留めておきます。やっと環境構築が終わった人には何のこっちゃの話なので無視してください。
seleniumのコードを検索していると時々selenium3.x系の記法が使われている場合があり、selenium4.x系では一部記法が変わっているので、そういったエラーで躓くかもしれません。私もその違いに一瞬惑わされました...
driver.findElementById("elementId");
driver.findElement(By.id("elementId"));
要素の指定方法が変わったわけですが、注意ポイントは引数として渡される括弧内のBy
は関数名では無くなったので次のようなインポートが必要です。
from selenium.webdriver.common.by import By
これがfind系のプログラムは全部エラーになるので、スクレイピング目的でselenium使う人はおまじないだと思ってとりあえず冒頭で宣言しておくべきだと思います。あんまり他の記事でも強調されてませんでした。実際困ったらAIに聞けばすぐ教えてくれますが...
次記事に続きます。