0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

chromedriver更新

Last updated at Posted at 2023-08-27

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"))

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?