前提
現在,ラズパイにてデジタルサイネージを実現させるために,Google Apps Script(GAS)でデプロイしたWebページを表示させるプログラムを作っています。
GASのプログラムはうまく動いているのですが,ラズパイのブラウザ表示がうまくいきません。1か月前はうまくいっていたのですが,ここ1週間はうまくいかず,おそらくChromium-browserとchromedriverのバージョンが最新のものだと動かないのではないか,という推測をしています。
OSを入れなおしたり,print文にてデバッグをしたりして試しましたが,seleniumによりブラウザを立ち上げるとブラウザが真っ白いまま動かなくなってしまいます。
そこで,Chromium-browserとchromedriverのバージョンを以前のものにしようとしました。browserの方は95にできたのですが,driverの方がどのような手順で95にすればいいか分からず,悩んでいます。
そもそも,違う理由でブラウザがうまく読み込めていない可能性もあるため,質問いたしました。どうぞよろしくお願いいたします。
実現したいこと
- 1. Raspberry pi 3 model B で selenium を使用してブラウザの操作をしたい
- 1.1. seleniumだけではなく,ライブラリschedule, gspread, oauth2clientも動かしたい
- 1.2.データの内容に応じて,プログラムの動きを変えるために,複数のライブラリが必要となる
- 2.上記した1を実行できれば問題ないが,実行できない場合はChromedriver95.0.4638.78をインストールしたい
発生している問題・エラーメッセージ
- 下記のプログラムを動かすと,ブラウザが真っ白なままずっと読み込み中になってしまう
- エラーメッセージは無い
該当のソースコード
python
1#!/usr/bin/env python 2# coding: utf-8 3 4import gspread 5from oauth2client.service_account import ServiceAccountCredentials 6from selenium import webdriver 7from selenium.webdriver.chrome.service import Service 8from selenium.webdriver.chrome.options import Options 9import schedule 10from time import sleep 11import datetime 12 13# スプレッドシート関連設定 14json_file = 'jsonファイルネーム' 15file_name = 'SpreadSheetファイルネーム' 16 17scope = ['https://spreadsheets.google.com/feeds', 18 'https://www.googleapis.com/auth/drive'] 19 20# スプレッドシートにアクセス 21credentials = ServiceAccountCredentials.from_json_keyfile_name(json_file, scope) 22gc = gspread.authorize(credentials) 23sh = gc.open(file_name) 24 25# シートの選択 26wks = sh.get_worksheet(0) 27 28# 単一セル(A1)データ取得(GASから送られてきたファイル名の取得) 29element = wks.cell(1, 1).value 30 31# オプション設定 32options = Options() 33# 余計な表示を消去 34options.add_experimental_option("excludeSwitches", ['enable-automation']) 35# フルスクリーンでブラウザ起動 36options.add_argument("--start-fullscreen") 37# プロファイル設定 38profilefolder = '--user-data-dir=' + '/home/pi/.config/chromium/Profile 1' 39options.add_argument(profilefolder) 40 41driver = webdriver.Chrome(service=Service("/usr/lib/chromium-browser/chromedriver"), options=options) 42 43# URLを設定する 44url = "指定したWebサイトのURL" 45 46driver.get(url) 47 48# 定期実行する関数を準備 49def main(): 50 # URLを開く 51 driver.get(url) 52 # ページの更新 53 driver.refresh() 54 55# スケジュール登録(取得したファイル名に合わせてスケジュールを変更させる) 56if element == '': 57 schedule.every().days.at("01:05").do(main) 58 59else: 60 #from時刻の取得と1分加算し,定期時刻に入れる 61 fromtime = str(int(element[15:17])).zfill(2) + ':' + str(int(element[17:19])+1).zfill(2) 62 schedule.every().days.at(fromtime).do(main) 63 64 #to時刻の取得と1分加算し,定期時刻に入れる 65 totime = str(int(element[19:21])).zfill(2) + ':' + str(int(element[21:23])+1).zfill(2) 66 schedule.every().days.at(totime).do(fin) 67 68 69try: 70 71 while True: 72 schedule.run_pending() 73 74 sleep(5) 75 76 s = datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S') 77 78 print("待機中..." + s) 79 80# エラーが発生した時はエラーメッセージを吐き出す。 81except Exception as e: 82 print(e) 83 print("エラーが発生しました。") 84 85# 最後にドライバーを終了する 86finally: 87 88 driver.close()
試したこと
- 上記プログラムの45行目当たりの,driver = webdriver.Chrome~の上まではprint文により,実行できていることを確認
- その下からはコマンド上で何も出力されていないことを確認
- 動いた時のchromium-browserとchromedriverのバージョンは95.0.4638.78であった
- OSをlegacy(Buster)でインストールして,seleniumだけにしたプログラムは動いたが,oauth2clientやgspreadを含めたプログラムは動かなかった
- chromedriverの置き場だと思われる,https://chromium.googlesource.com/chromium/src/+archive/refs/tags/95.0.4638.78.tar.gz からラズパイにデータをダウンロード
- tar zvxf 95.0.4638.78.tar.gz コマンドにて解凍
- 解凍したファイルをインストールしようとしたが,やり方が分からない
補足情報(FW/ツールのバージョンなど)
- Raspberry pi 3 model B
- OS: Raspbian GNU/Linux 11 (bullseye)
- ブラウザ:chromium-browser 98.0.4758.106
- chromium-chromedriver 98.0.4758.106
- selenium 4.1.3
- scedule 1.1.0
- oauth2client 4.1.3
- gspread 5.2.0
あなたの回答
tips
プレビュー