社内ツールでseleniumを使って色々やろうとしたのだが、Chromeが頻繁に更新されるので、手動更新がめんどくさくなった。
自動更新の仕方を調べ、実際にコーディングし、意図する結果になっているので、整理しておく。
※多少雑だが個人的備忘なのでご了承ください。
そしてそのツールは現状日の目を見ていないが、法改正をキャッチするために日次でチェックするツール(スクレイピング)にでもしようかと思ったり。
また、筆者はpythonはゴミレベルなので間違いとかあれば指摘歓迎です。
なおJavaの記事は以下で記載しているので参考まで。(私はJavaで飯を食っているエンジニア)
環境情報
- python3
- Windows 10
- VsCode
※なお対象のdriverはchromedriver
実装
- まずseleniumがない場合はinstall
> pip install selenium
- 適当なフォルダにpythonのファイルを用意。
- import文を以下のように定義
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
- 環境に存在しているchromedriverを自動更新する
driver = webdriver.Chrome(ChromeDriverManager().install())
googleにログインする場合はprofileを指定する必要があるらしいので以下のように書きかえます。
# プロファイル指定
profilefolder = '--user-data-dir=' +'%HOMEPATH%\AppData\\Local\\Google\\Chrome\\User Data\\Profile 1'
options = webdriver.ChromeOptions()
options.add_argument(profilefolder)
# chromedrivarをインストール
driver = webdriver.Chrome(
ChromeDriverManager().install(),
# オプション指定
options = options
)
これで勝手に更新してくれる。
場所は、%HOMEPATH%.cache\selenium\chromedriver\win32以下にversionごとにフォルダができて、chromedriver.exeが存在しているはず。
seleniumuで自動テストなどを書いている場合は、実行の都度更新されていないとバージョン差異によって失敗するので、更新ロジックに続けでそのまま処理を書いる。
※そんなことしなくても大丈夫なはず。
- driverを利用してseleniumで起動、実行(完成形)
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
# プロファイル指定
profilefolder = '--user-data-dir=' +'%HOMEPATH%\AppData\\Local\\Google\\Chrome\\User Data\\Profile 1'
options = webdriver.ChromeOptions()
options.add_argument(profilefolder)
# chromedrivarをインストール
driver = webdriver.Chrome(
ChromeDriverManager().install(),
# オプション指定
options = options
)
# フルパスを指定
driver.get("https://www.google.com")
# DOM要素を取得
img = driver.find_element_by_class_name("lnXdpd")
一応こんな感じで実行できることは確認できている。
、、、動的型付けマジわからん。なれない。