chromedriver更新

googleがとちくるって配布方法を変えたので改めて自動更新を考える
chromedriverはv115以降にURLが変わっています。zipの構成も変わってるので共用はめんどくさいですね
頑張ってpythonコード書きました
v114以下はzipの構成が違ってるので若干手直しがいるかも
v122でまた変えたのかな、こんなんだからgcpはビジネスでは使えないな(テストはしてない)
115〜121までのブツはどこにあるか不明

```python3
# 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"))

```