ある銀行にログインするだけのシンプルなPythonのプログラムを作っています。
起こっている問題
銀行のトップページから、ログインボタンをクリック⇒証明書ログインをクリックすると
証明書選択ダイアログがポップアップして、証明書が選択された状態になります。
そこまではいいのですが、
証明書ダイアログの「OK」のボタンがクリックできず、そこで止まってしまいます。
最終的に下記のようにタイムアウトエラーになってしまいます。
TimeoutException: Message: timeout: Timed out receiving message from renderer: -0.013 (Session info: chrome=80.0.3987.163)
プログラムが止まる箇所は次のコードの箇所です。
コードに問題があるというより、ダイアログ自体を認識できていない感じがします。
python
1driver.find_element_by_xpath("//input[@name='']").click()
証明書選択のダイアログを認識していないみたいです。
今回のプログラム
今回動かそうとしているプログラムは下記になります。
Python
1from selenium import webdriver 2import chromedriver_binary 3from selenium.webdriver.support.select import Select 4from selenium.webdriver.common.action_chains import ActionChains 5from selenium.webdriver.chrome.options import Options 6from selenium.webdriver.common.alert import Alert 7import time 8 9''' 10ダウンロードフォルダーをデフォルトから変更 11↓のコメントアウトを外すと5行目のインポートはいらない 12''' 13# options = webdriver.ChromeOptions() 14options = Options() 15 16options.add_experimental_option('prefs', { 17'download.default_directory': r'G:\Fのバックアップ\ドキュメント', 18'download.prompt_for_download': False, 19'download.directory_upgrade': True, 20'safebrowsing.enabled': True 21}) 22# options.add_argument('--headless') 23driver = webdriver.Chrome(options=options) 24# 要素が見つかるまで30秒待つ設定 25driver.implicitly_wait(30) 26 27driver.get("https://www.shizuokabank.co.jp/corporation/index.html") 28driver.find_element_by_xpath(u"//img[@alt='ログインはこちら']").click() 29# ERROR: Caught exception [ERROR: Unsupported command [selectWindow | win_ser_1 | ]] 30# ウィンドウハンドルを取得する 31handle_array = driver.window_handles 32# seleniumで操作可能なdriverを切り替える 33driver.switch_to.window(handle_array[1]) 34driver.find_element_by_name("forward_rblgi01_s01").click() 35time.sleep(2) 36 37# ここで証明書選択の選択ダイアログがポップアップする。 38# 証明書の選択はできているが、OKがクリックできない。 39driver.find_element_by_xpath("//input[@name='']").click() 40time.sleep(2) 41 42# ERROR: Caught exception [ERROR: Unsupported command [selectWindow | win_ser_2 | ]] 43driver.find_element_by_xpath("//button[@value='0']").click() 44driver.find_element_by_xpath("//button[@value='0']").click() 45driver.find_element_by_xpath("//button[@value='0']").click() 46driver.find_element_by_xpath("//button[@value='0']").click() 47driver.find_element_by_xpath("//button[@value='0']").click() 48driver.find_element_by_xpath("//button[@value='0']").click() 49driver.find_element_by_xpath("//button[@value='0']").click() 50driver.find_element_by_xpath("//button[@value='0']").click() 51driver.find_element_by_xpath("//button[@value='0']").click() 52driver.find_element_by_id("confirmBtn").click() 53 54time.sleep(2)
試したこと
①ダイアログにWindowを切り替えればOKボタンをクリックできるのかと思い、下記のコードをエラー箇所の前に設置してみましたが動きませんでした。
# ウィンドウハンドルを取得する handle_array = driver.window_handles # seleniumで操作可能なdriverを切り替える driver.switch_to.window(handle_array[1])
②普段使っているクロームで証明書を自動選択するようにして、Seleniumにそのクロームのプロファイルを設定して起動してみましたが、挙動は変わりませんでした。
③証明書のダイアログのOKボタンの要素を取得しようとしていますが、右クリックで検証を押してもソースが真っ白で見れません。
④証明書を選択している部分で手動でEnterを押すとOKボタンをクリックできると分かったので、
pyautoguiをimportしてEnterを押している(press('enter'))のですが、何も動きません。
環境
Windows10
Python3.7.6
結構考え込んでて手詰まり感があります。
ご知見のある方どうぞよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/06/12 11:20