質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

解決済

PythonのSeleniumでIEを操作したいが、webdriver_managerでValueErrorが発生

yutchan
yutchan

総合スコア5

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

2回答

0評価

0クリップ

2292閲覧

投稿2021/08/10 01:45

編集2021/08/11 06:41

前提・実現したいこと

Python(3.7)のSeleniumでIEでしか動作しない社内システムのスクレイピングに取り組んでいます。
そこで、webdriver_managerのIEDriverManagerを使いたいと考えております。

発生している問題

以下のように記述したのですが、ValueErrorが発生します。
エラー無くドライバをダウンロードさせるには、どのように記述すれば良いのでしょうか?

因みに、こちらのブログを参考にさせて頂いています。
https://yuki.world/python-selenium-chromedriver-auto-update/#t_Internet_ExplorerIEDriver

何卒、アドバイスをお願い致します。

発生している問題・エラーメッセージ

C:\work>python 01_ie_test.py [WDM] - There is no [x64] IEDriverServer for browser in cache Traceback (most recent call last): File "01_ie_test.py", line 4, in <module> driver_path = IEDriverManager().install() File "C:\Python\lib\site-packages\webdriver_manager\microsoft.py", line 26, in install return self._get_driver_path(self.driver) File "C:\Python\lib\site-packages\webdriver_manager\manager.py", line 29, in _get_driver_path file = download_file(driver.get_url()) File "C:\Python\lib\site-packages\webdriver_manager\driver.py", line 168, in get_url major, minor, patch = self.__get_divided_version(self.get_version()) File "C:\Python\lib\site-packages\webdriver_manager\driver.py", line 183, in __get_divided_version "but given was: {version}".format(version=self.get_version())) ValueError: Version must consist of major, minor and/or patch, but given was: .3.150.2

試したコード

python

from selenium import webdriver from webdriver_manager.microsoft import IEDriverManager driver_path = IEDriverManager().install() driver = webdriver.Ie(driver_path) driver.get('https://google.com')

自分で試したこと

Python\Lib\site-packages\webdriver_manager\にある
microsoft.pyのIEDriverManager()の__init__の引数urlに記載の
http://selenium-release.storage.googleapis.com
にアクセスしたところ、以下の記述があることを発見しました。

html

<Contents> <Key>3.150/IEDriverServer_Win32_.3.150.2.zip</Key> <Generation>1628200845472844</Generation> <MetaGeneration>1</MetaGeneration> <LastModified>2021-08-05T22:00:45.502Z</LastModified> <ETag>"6f17f688d643c40ea21c2610b55d259f"</ETag> <Size>1062956</Size> </Contents> <Contents> <Key>3.150/IEDriverServer_x64_.3.150.2.zip</Key> <Generation>1628200846705412</Generation> <MetaGeneration>1</MetaGeneration> <LastModified>2021-08-05T22:00:46.734Z</LastModified> <ETag>"93ddb5c8a84a304b9ed915431c79d816"</ETag> <Size>1154724</Size> </Contents>

__get_divided_versionのversionをsplitしたとき、
versionの中身は「.3.150.2」となっており、
splitしたら[],[3],[150],[2]となってlen(divided_version)が4になってValueErrorになっている
ということで、
Python\Lib\site-packages\webdriver_manager\にある
driver.pyの
class IEDriver(Driver):の
__get_divided_versionの2行目に
version = version[1:]
を追加してみました。(下記コードの2行目です。)

python

def __get_divided_version(self, version): version = version[1:] divided_version = version.split('.') if len(divided_version) == 2: return divided_version[0], divided_version[1], '0' elif len(divided_version) == 3: return divided_version else: raise ValueError( "Version must consist of major, minor and/or patch, " "but given was: {version}".format(version=self.get_version()))

すると以下のように、len(divided_version) == 3になりますので、
ダウンロードを試みるところまで進んだのですが、
ピリオドを削除した影響でurlのピリオドも消え、リンクが正しくなくなり、
ダウンロードに失敗しました。

python

C:\work>python 01_ie_test.py ====== WebDriver manager ====== There is no [Win32] IEDriverServer for browser in cache Trying to download new driver from http://selenium-release.storage.googleapis.com/3.150/IEDriverServer_Win32_3.150.2.zip Traceback (most recent call last): File "C:\work\01_ie_test.py", line 4, in <module> driver_path = IEDriverManager(os_type = "win32").install() File "C:\Python\lib\site-packages\webdriver_manager\microsoft.py", line 25, in install return self._get_driver_path(self.driver) File "C:\Python\lib\site-packages\webdriver_manager\manager.py", line 30, in _get_driver_path file = download_file(driver.get_url()) File "C:\Python\lib\site-packages\webdriver_manager\utils.py", line 93, in download_file validate_response(response) File "C:\Python\lib\site-packages\webdriver_manager\utils.py", line 79, in validate_response raise ValueError("There is no such driver by url {}".format(resp.url)) ValueError: There is no such driver by url http://selenium-release.storage.googleapis.com/3.150/IEDriverServer_Win32_3.150.2.zip

ここまでした時点で、一旦質問してみようと考え、投稿致します。
最後まで見て頂いて、ありがとうございます。

又、別で質問しようかと思っているのですが、
IEはもう使用出来なくなりますので、PythonのSeleniumでEdgeのIEモードを操作する方法について
どなたかご存じありませんでしょうか。
C#だと・・・

https://qiita.com/satata/items/47e8b2422e9238f1a7ef

https://stackoverflow.com/questions/63361687/is-there-a-way-to-activate-ie-mode-in-edge-options

あたりが上位に表示されますが、pythonで同様のことをしようとすると、calabilitiesを適切に設定
すれば出来るのでしょうか・・・

https://www.seleniumqref.com/api/python/browser/Python_DesiredCapabilities_set.html

後ほど、新たに質問を立てるつもりです。
下記に質問を立てました。
https://teratail.com/questions/353567

補足情報(FW/ツールのバージョンなど)

利用環境
OS:windows10

python --version

Python 3.7.3

pip list

Package Version


altgraph 0.17
appdirs 1.4.4
astroid 2.5
beautifulsoup4 4.9.3
certifi 2019.3.9
chardet 3.0.4
colorama 0.4.4
comtypes 1.1.8
configparser 5.0.1
crayons 0.4.0
et-xmlfile 1.0.1
future 0.18.2
gitdb 4.0.5
GitPython 3.1.13
html5lib 1.0.1
idna 2.8
isort 5.7.0
jdcal 1.4
lazy-object-proxy 1.5.2
lint 1.2.1
lxml 4.3.3
mccabe 0.6.1
MouseInfo 0.1.3
msedge-selenium-tools 3.141.3
numpy 1.16.2
opencv-python 4.5.1.48
openpyxl 2.6.2
overlay 1.1.5
pandas 0.24.2
pefile 2019.4.18
Pillow 8.1.1
pings 0.0.1
pip 21.2.3
psutil 5.8.0
PyAutoGUI 0.9.52
PyGetWindow 0.0.9
pyinstaller 4.1
pyinstaller-hooks-contrib 2020.10
pylint 2.7.1
PyMsgBox 1.0.9
pyperclip 1.8.2
PyRect 0.1.4
PyScreeze 0.1.26
python-dateutil 2.8.0
PyTweening 1.0.3
pytz 2019.1
pywin32 300
pywin32-ctypes 0.2.0
requests 2.21.0
selenium 3.141.0
setuptools 40.8.0
six 1.12.0
smmap 3.0.5
soupsieve 2.2
toml 0.10.2
tqdm 4.56.1
typed-ast 1.4.2
urllib3 1.24.1
webdriver-manager 3.2.2
webencodings 0.5.1
wheel 0.35.1
wrapt 1.12.1
xlrd 1.2.0
zenhan 0.5.2

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。