実現したいこと
Google Colabを使用して、あるWEBサイトにログインし、操作して、情報を取得したいです
前提
(1)対象のWEBサイト:ログイン後、WEB操作が必要
(2)PCのローカルで作成したPythonでは(ヘッドレスモードは使用しない記述)問題なくWEBサイトからの情報を取得できている
(3)契約上情報の取得の問題はなし
WEBサイトの顧客なのですが、毎日その数値を取得しスプレットシートに転記して
ほかのメンバーに共有する
(4)『Colab の Selenium use chrome が予期せず終了しました』のエラーは下記URLの
コードを今回のスクリプト実行前に実行することで回避できております。
https://github.com/kaliiiiiiiiii/Selenium-Profiles/issues/10
google colaboratoryで、あるWEBサイトにログイン後、操作、情報を取得・・としたかったのですが、ログイン時にエラーとなってしまいました。。。
問題点
① ログインの箇所で、IDを入力させるためのコードの部分『send_keys』の箇所がエラーになる
② ID,PASSのログイン部分をコメントアウトし、ログインボタンを押すコードから実行させたがそれもエラー(ブラウザにID、PASSを記憶させているせいかと思ったので)
発生している問題・エラーメッセージ
①ログインの箇所で、IDを入力させるためのコードの部分『send_keys』の箇所がエラー
ElementNotInteractableException Traceback (most recent call last) <ipython-input-33-a9c55d67b36d> in <module> 45 46 name='eclogin' ---> 47 d.find_element(By.NAME,value=name).send_keys('IDを設定') 48 sleep(3) 49 3 frames /usr/local/lib/python3.9/dist-packages/selenium/webdriver/remote/errorhandler.py in check_response(self, response) 243 alert_text = value["alert"].get("text") 244 raise exception_class(message, screen, stacktrace, alert_text) # type: ignore[call-arg] # mypy is not smart enough here --> 245 raise exception_class(message, screen, stacktrace) ElementNotInteractableException: Message: element not interactable (Session info: headless chrome=90.0.4430.212)
② ID,PASSのログイン部分をコメントアウトし、ログインボタンを押すコードから実行させたがそれもエラー
ElementNotInteractableException Traceback (most recent call last) <ipython-input-37-46bbf5b34699> in <module> 54 55 #ログインボタンを押す ---> 56 d.find_element(By.NAME, 'login_ec_btn').click() 57 sleep(2) 58 3 frames /usr/local/lib/python3.9/dist-packages/selenium/webdriver/remote/errorhandler.py in check_response(self, response) 243 alert_text = value["alert"].get("text") 244 raise exception_class(message, screen, stacktrace, alert_text) # type: ignore[call-arg] # mypy is not smart enough here --> 245 raise exception_class(message, screen, stacktrace) ElementNotInteractableException: Message: element not interactable (Session info: headless chrome=90.0.4430.212) Stacktrace: #0 0x5562edb457f9 <unknown>
該当のソースコード
#ライブラリをインポート from selenium import webdriver import time import datetime import sys #if文でreturnで中止するときに必要 import os #ユーザーのプロファイルパスを取得するときに必要 '''----------------------- そのほか使うライブラリ --------------------------''' from time import sleep from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from selenium.webdriver.support.ui import Select from datetime import timedelta from tkinter import messagebox #--------------------------------------------------------------------------------------- # 処理開始 #--------------------------------------------------------------------------------------- # ブラウザをheadlessモード実行 # オプション定義 options = webdriver.ChromeOptions() options.add_experimental_option('excludeSwitches', ['enable-logging']) options.use_chromium = True #ChromeDriverを自動更新するライブラリ # from webdriver_manager.chrome import ChromeDriverManager print("\nブラウザを設定") options = webdriver.ChromeOptions() options.add_argument('--headless') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') d = webdriver.Chrome('chromedriver',options=options) d.implicitly_wait(10) # サイトにアクセス print("サイトにアクセス開始") d.get("アクセスしたいURL") sleep(2) print(d.title) sleep(2) print(d.title) name='eclogin' d.find_element(By.NAME,value=name).send_keys('ログインID') sleep(3) # password入力 pw='ecpasswd' d.find_element(By.NAME,value=pw).send_keys('パスワード') sleep(3) #ログインボタンを押す d.find_element(By.NAME, 'login_ec_btn').click() sleep(2) #『レポート』を選択する d.find_element(By.CLASS_NAME,'drop').click() sleep(2) ・ ・ ・
試したこと
先に記載した内容と重複しますが
・ ID,PASSのログイン部分をコメントアウトし、ログインボタンを押すコードから実行させた(ブラウザにID、PASSを記憶させているせいかと思ったので)
・インストールするドライバーのバージョンの指定
前提の(4) のhttps://github.com/kaliiiiiiiiii/Selenium-Profiles/issues/10に、
apt-get install chromium chromium-driver という箇所があるのですが、1つ
バージョンを下げたものをインストールするようの記述してみました(結果:変わらず)
pip install chromedriver-binary==108.0.5359.71
補足情報(FW/ツールのバージョンなど)
そもそもの話になってしまうのですが、
headlessモードを使用している場合は、Send_Keysは使えないのでしょうか。
回答1件
あなたの回答
tips
プレビュー