質問: driver.find_element_by_xpath("//input[@type='submit']") button_login.click() driver.get('https://パスワードをここに入れる@xxxx/menu.php3?type=xxxxxx&pass=&ip_addr= ') ``` ### 試したこと ・表記したソースはChromeDriverですが、IEDriverでも試しましたが同じ結果です。 ・Basic認証画面はID入力欄がないので、ソース上はhttps://パスワード@xxxx/x.php3となっていますが、 submit認証画面(1画面目)で入力するIDを埋め込んで、https://ID:パスワード@xxxx/x.php3としてもダメです。 ### 補足情報(FW/ツールのバージョンなど) Google Chrome バージョン: 84.0.4147.89(64bit) Internet Explorer11 バージョン:11.959.18362.0 Python バージョン:3.7.4 ChromeDriver バージョン:84.0.4147.30 IEDriver バージョン:3.150.1.0 1画面目のログイン画面 ![1画面目のログイン画面](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/1a8dd75c01d1ad7af33473e7cdda1564.jpeg) ここでログインボタンを押した後、下記のパスワード要求画面に遷移します。 2画面目のパスワード要求 ![パスワード要求](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/619338531c26ef26dab728f7b2e37603.jpeg)
回答: ではindex.phpに遷移したのち、 frameをa.htmに移して、 そこでそのJSを実行してやるといいのではないでしょうか。 ``` # driver.find_element_by_hogehoge('fugafuga') でa.htmのframeタグを指定する driver.switch_to.frame(driver.find_element_by_hogehoge('fugafuga')) driver.execute_script('document.Main.pass.value="パスワード";submit();') ``` コメントを受けて追記 ========== かなり難易度が高そうですね。。。 思いつくことは後2つあります。 1つ目は 1画面目を開いた後、従業員コード等を入力する前に、 JSで無理やりリクエストを投げる方法です。 詳しく紐解いて行かないと分からないですがおそらくpostリクエストだと思います。 画像を見る限りvueやangulerは使ってなさそうなシステムなので、 生JSでおそらくぶっこめると思います。 ``` driver.execute_script(''' function send_post_request() { const form = document.createElement('form'); form.method = 'post'; form.action = 'パスワードをここに入れる@xxxx/menu.php3?'; const id_Field = document.createElement('input'); id_Field.type = 'hidden'; id_Field.name = 'id'; id_Field.value = 'hogehoge'; form.appendChild(id_Field); const pass_Field = document.createElement('input'); pass_Field.type = 'hidden'; pass_Field.name = 'pass'; pass_Field.value = 'fugafuga'; form.appendChild(pass_Field); document.body.appendChild(form); form.submit(); } send_post_request(); ''') ``` おおよそこんなイメージでしょうか。 cf 2つ目は pyautoguiという別のモジュールと組み合わせることです。 こちらは別途調べていただければと思いますが、 1つ目よりはシンプルだと思います。