前提・実現したいこと
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
1from selenium import webdriver 2from webdriver_manager.microsoft import IEDriverManager 3 4driver_path = IEDriverManager().install() 5driver = webdriver.Ie(driver_path) 6driver.get('https://google.com')
自分で試したこと
Python\Lib\site-packages\webdriver_manager\にある
microsoft.pyのIEDriverManager()の__init__の引数urlに記載の
http://selenium-release.storage.googleapis.com
にアクセスしたところ、以下の記述があることを発見しました。
html
1<Contents> 2<Key>3.150/IEDriverServer_Win32_.3.150.2.zip</Key> 3<Generation>1628200845472844</Generation> 4<MetaGeneration>1</MetaGeneration> 5<LastModified>2021-08-05T22:00:45.502Z</LastModified> 6<ETag>"6f17f688d643c40ea21c2610b55d259f"</ETag> 7<Size>1062956</Size> 8</Contents> 9 10 11<Contents> 12<Key>3.150/IEDriverServer_x64_.3.150.2.zip</Key> 13<Generation>1628200846705412</Generation> 14<MetaGeneration>1</MetaGeneration> 15<LastModified>2021-08-05T22:00:46.734Z</LastModified> 16<ETag>"93ddb5c8a84a304b9ed915431c79d816"</ETag> 17<Size>1154724</Size> 18</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
1 def __get_divided_version(self, version): 2 version = version[1:] 3 divided_version = version.split('.') 4 if len(divided_version) == 2: 5 return divided_version[0], divided_version[1], '0' 6 elif len(divided_version) == 3: 7 return divided_version 8 else: 9 raise ValueError( 10 "Version must consist of major, minor and/or patch, " 11 "but given was: {version}".format(version=self.get_version()))
すると以下のように、len(divided_version) == 3になりますので、
ダウンロードを試みるところまで進んだのですが、
ピリオドを削除した影響でurlのピリオドも消え、リンクが正しくなくなり、
ダウンロードに失敗しました。
python
1C:\work>python 01_ie_test.py 2 3 4====== WebDriver manager ====== 5There is no [Win32] IEDriverServer for browser in cache 6Trying to download new driver from http://selenium-release.storage.googleapis.com/3.150/IEDriverServer_Win32_3.150.2.zip 7Traceback (most recent call last): 8 File "C:\work\01_ie_test.py", line 4, in <module> 9 driver_path = IEDriverManager(os_type = "win32").install() 10 File "C:\Python\lib\site-packages\webdriver_manager\microsoft.py", line 25, in install 11 return self._get_driver_path(self.driver) 12 File "C:\Python\lib\site-packages\webdriver_manager\manager.py", line 30, in _get_driver_path 13 file = download_file(driver.get_url()) 14 File "C:\Python\lib\site-packages\webdriver_manager\utils.py", line 93, in download_file 15 validate_response(response) 16 File "C:\Python\lib\site-packages\webdriver_manager\utils.py", line 79, in validate_response 17 raise ValueError("There is no such driver by url {}".format(resp.url)) 18ValueError: 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
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。