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

  • 投稿 : 2020-06-25
  • 更新 : 2022-01-24
追記:2020/09/12
Python(64bit版)でも確認しました。
この辺りは、Python(32bit版)と変わりなさそうです。

追記:2022/02/24
Python 3.10.2(64bit版)で確認しました。

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版だからかもとか考えてみたのですが、どうだかわかりません。

追記:2020/09/12
Python(64bit版)でも、win32のドライバーで動作しました

公式(IE webdriver)

InternetExplorerDriver · SeleniumHQ/selenium Wiki · GitHub

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

今回使用したのは、これ

設定メモ

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のようです。私の環境では、画像のようになっています。

追記:2020/09/12
4つとも「保護モードを有効にする」にチェックしないと、「selenium.common.exceptions.NoSuchWindowException」とか、エラーになるケースがありました。やっぱり、この設定は必要みたい。

ページのHTMLの要素を読み取りとかしてる場合は、上記設定をしてないとエラーになるようです。

IE11の設定 その2 詳細設定

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

レジストリ

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

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

追記:2020/09/12
現状は、設定してませんが動作してるようです。

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

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()

※サンプルは、selenium 3で動作します。selenium 4からは変更があったのでそのままだと動きません

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

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

IE操作時のコマンドプロンプトを非表示にする方法

追記:2020/09/12Python(64bit版)でも確認しました。この辺りは、Python(32bit版)と変わりなさそうです。参考Selenium が webdrive

某氏の猫空

もう少し、凝ったことをしたい

環境構築「Python」「Selenium」「WebDriver」を導入してください動画での説明サンプルプログラム・テキストボックスに入力・HTMLから要素を読

某氏の猫空

スポンサーリンク