【Python】Selenium WebDriver でIE11(windows10)を操作【2020年】

Selenium

Selenium WebDriver は(Selenese で、またはクライアントAPIを介して送信される)コマンドを受け入れ、それらをブラウザに送信する。これは、ブラウザにコマンドを送信して結果を取得するブラウザ固有のブラウザ・ドライバを介して実装される。ほとんどのブラウザ・ドライバは、実際にブラウザアプリケーション(Firefox、Google Chrome、Internet Explorer、Safari、Microsoft Edge 等)を起動してアクセスする。
Selenium (ソフトウェア) - Wikipedia

pip install selenium

Pythonで使う場合は、上記コマンドで簡単にインストールできる。Pythonから簡単にブラウザ操作ができるようになります。

参考

1. 公式サイトより IEDriverServer_Win32_3.9.0.zip をダウンロードし解凍。webdriver パス指定の場所に移動。
2. IEの詳細設定の拡張保護モードを有効にする。
3. IEのセキュリティを中、保護モードをオン。(制限付きサイトだけは高。なぜか変更できない)
4. 64ビット版の指示の通り regedit でレジストリを編集
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHEを新規に作成(ご説明のアドレスと若干違う)。iexplore.exeを新規作成し DWORDを16進数で0に設定した。
5.ブラウザの拡大を100%に設定
6.PCを再起動

しかし、疑問点がいくつか。もし解りましたら後学のため教えていただきたく存じます。

(1)なぜ64bitなのにwin32のドライバーで動くのか?x64では動かない。
(2)公式サイトによると拡張保護モードは無効にすると書いてある(逆)。
Python 3.x - seleniumで[WinError 10054]を解決したい|teratail

私の環境では、ほぼ上記通りで動作しました。

設定がうまくできてないと「ConnectionResetError(10054, '既存の接続はリモート ホストに強制的に切断されました。', None, 10054, None)」とか言うエラーになって、IEすらもたちあがりませんでした。

あと、私の環境でも、win32のドライバーで動作しました。これは謎なんですが、もしかすると、インストールしてるPythonが32bit版だからかもとか考えてみたのですが、どうだかわかりません。

公式

InternetExplorerDriver · SeleniumHQ/selenium Wiki · GitHub

設定メモ

Python

Python 3.8.3 (tags/v3.8.3:6f8c832, May 13 2020, 22:20:19) [MSC v.1925 32 bit (Intel)] on win32

Download Python | Python.org

webdriver

IEDriverServer_Win32_3.9.0.zip
http://selenium-release.storage.googleapis.com/index.html?path=3.9.0/

※ファイルは展開(解凍)して使用します。

IE11の設定 その1 セキュリティー

上記の4か所が同じならOKなようです。4つとも「保護モードを有効にする」にチェックしました。他の設定は、なんでもOKのようです。私の環境では、画像のようになっています。

IE11の設定 その2 詳細設定

詳細設定のところの「拡張保護モードを有効にする」「拡張保護モードで64ビットプロセッサーを有効にする」の2つは、画像の通り、有効にしません。

レジストリ

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE

上記の場所に、iexplore.exeを新規作成し DWORDを16進数で0で登録します。

動作確認用サンプルプログラム

import time
from selenium import webdriver

driver=webdriver.Ie("C:\\webdriver\\IEDriverServer.exe")

driver.get("https://www.google.com/")
time.sleep(3)
search_box = driver.find_element_by_name("q")
search_box.send_keys('今日の天気は?')
search_box.submit()
time.sleep(20)
driver.quit()

設定がうまく行けば、上記が動きます。私の環境ではwebdriverのパスの指定のところは「\\」にしないと認識しませんでした。

さすがに、IE11を使う人が少ないからか、検索してもあまり情報がなくて挫折しそうになりました。IE11(Windows10)で動作しましたよということで・・。

スポンサーリンク
コメント一覧
  • 名前:管理人 :

    コメントは、まだありません。