googleがとちくるって配布方法を変えたので改めて自動更新を考える
chromedriverはv115以降にURLが変わっています。zipの構成も変わってるので共用はめんどくさいですね
頑張ってpythonコード書きました
v114以下はzipの構成が違ってるので若干手直しがいるかも
v122でまた変えたのかな、こんなんだからgcpはビジネスでは使えないな(テストはしてない)
115〜121までのブツはどこにあるか不明
# chromedriver導入
import os
import pathlib
import re
import urllib
import urllib.request
import subprocess
import datetime
import shutil
import zipfile
print('# chromedriver取得')
print('## chromeのバージョン取得')
version_all=subprocess.check_output(["google-chrome","--version"]).decode("utf8").rstrip()
major_version=re.sub("Google Chrome ([0-9]*).*","\\1",version_all)
search_driver_version=re.sub("Google Chrome ([0-9]*\.[0-9]*\.[0-9]*).*","\\1",version_all)
print('### major_version : ' + major_version)
print('### search_driver_version : ' + search_driver_version)
skip_flag=False
todir=os.environ['HOME'] + "/.local/bin"
if not pathlib.Path(todir).is_dir():
print('### binディレクトリがなければ作成する')
pathlib.Path(todir).mkdir()
print('## シンボリックリンクの確認')
if pathlib.Path(todir + "/chromedriver").is_symlink():
cdver=subprocess.check_output([todir + "/chromedriver","--version"]).decode("utf8").rstrip()
cdmajor=re.sub("ChromeDriver ([0-9]*).*","\\1",cdver)
cddetail=re.sub("ChromeDriver ([0-9.]*).*","\\1",cdver)
if cdmajor == major_version:
skip_flag=True
else:
print('### chromeとメジャー番号が違うので新規取得する')
twoweek=datetime.datetime.timestamp(datetime.datetime.now()-datetime.timedelta(days=14))
if pathlib.Path(todir + "/chromedriver").stat().st_mtime < twoweek:
print('### 更新日から2週間経ってるからメジャーバージョン一致に関わらず取得')
skip_flag=False
else:
print('### 更新日が2週間以内だからメジャーバージョン比較に従う')
else:
print('### chromedriverはないので取得する')
if not skip_flag:
# ----------------------------------------------------------------------
# 対応するchromedriverのネットにある最新のバージョンを取得
# ----------------------------------------------------------------------
print('## 対応するchromedriverのネットにある最新のバージョンを取得')
if int(major_version) <= 114:
detail_url="https://chromedriver.storage.googleapis.com/LATEST_RELEASE_" + str(major_version)
elif int(major_version) >= 115:
detail_url="https://googlechromelabs.github.io/chrome-for-testing/LATEST_RELEASE_" + str(search_driver_version)
detail=urllib.request.urlopen(detail_url).read().decode()
if int(major_version) <= 114:
chromedriver_version_url="https://chromedriver.storage.googleapis.com/%s/chromedriver_linux64.zip" % ( detail )
elif int(major_version) >= 115 and int(major_version) < 122:
chromedriver_version_url="https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/%s/linux64/chromedriver-linux64.zip" % ( detail )
elif int(major_version) >= 122:
chromedriver_version_url="https://storage.googleapis.com/chrome-for-testing-public/%s/linux64/chromedriver-linux64.zip" % ( detail )
if pathlib.Path(todir + "/chromedriver_"+str(detail)).is_file():
print('## 最新版と同じファイルは取得済みなので以降はスキップ')
skip_flag = True
# # 張り直す? いったんコメントアウト
# if pathlib.Path(todir + "/chromedriver").is_symlink():
# pathlib.Path(todir + "/chromedriver").unlink()
# pathlib.Path(todir + "/chromedriver").symlink_to("chromedriver_"+detail)
if not skip_flag:
# ----------------------------------------------------------------------
# chromedriverをダウンロードと配置
# ----------------------------------------------------------------------
print('## chromedriverをダウンロードと配置')
zipname=todir + "/chromedriver_linux64.zip"
if pathlib.Path(zipname).is_file():
pathlib.Path(zipname).unlink()
subprocess.check_output(["wget","-O",zipname,chromedriver_version_url]).decode("utf8")
print('### zipを展開')
with zipfile.ZipFile(zipname) as zf:
zf.extract('chromedriver-linux64/chromedriver', path=todir)
pathlib.Path(zipname).unlink()
shutil.move(todir + "/chromedriver-linux64/chromedriver" , todir + "/chromedriver")
pathlib.Path(todir + "/chromedriver-linux64").rmdir()
print('### version をファイル名に付与')
pathlib.Path(todir +"/chromedriver").rename(todir +"/chromedriver" + "_" + str(detail))
print('### 実行権限を付与')
pathlib.Path(todir + "/chromedriver" + "_" + str(detail)).chmod( 0o755 )
print('### シンボリックリンクの更新')
if pathlib.Path(todir + "/chromedriver").is_symlink():
pathlib.Path(todir + "/chromedriver").unlink()
pathlib.Path(todir + "/chromedriver").symlink_to("chromedriver_"+detail)
print('## バージョンの出力')
print('$ chromdriver --version\n'+subprocess.check_output([todir + "/chromedriver","--version"]).decode("utf8"))