【Python3】Selenium4 でProxyが突破できない(Edge)
解決したいこと
社内Proxyが掛かっている環境でSelenium4
を利用してEdgeを操作したいと考えています。
しかしwebdriver.Edge()
にてProxy周りのエラーが出ているように見えます。
解決方法をご存知、もしくは解決に至るヒントをお持ちの方が居ましたらコメントをお願いします。
そもそも出力されているエラーに対して「これはPROXYの問題じゃないよ」というのも大歓迎です。
環境準備
Windows PowershellでPythonの仮想環境を作成
PS > python -m venv venv-hoge
仮想環境を起動して必要なパッケージをインストール
PS > cd venv-hoge\Scripts
PS > .\Activate.ps1
(venv) > python -m pip install --upgrade pip
(venv) > pip install selenium
(venv) > pip install webdriver-manager
環境確認
(venv) > python --version
Python 3.10.0
(venv) > python
>>> import selenium
>>> help(selenium)
: 省略
VERSION
4.2.0
該当するソースコード
# coding: utf-8
import os
from selenium import webdriver
from webdriver_manager.microsoft import EdgeChromiumDriverManager
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Options
# ブラウザの最新ドライバを%USERPROFILE%\SeleniumWebDriverに配置
driverDir = os.environ['USERPROFILE'] + "\\SeleniumWebDriver\\"
# フォルダが無ければ作成
if not os.path.exists(driverDir):
os.makedirs(driverDir)
# ドライバ配置
driverPath = EdgeChromiumDriverManager(path=driverDir).install()
# ドライバパスをserviceで渡す準備
service = Service(executable_path=driverPath)
# ドライバの立ち上げ
driver = webdriver.Edge(service=service)
実行結果(発生しているエラー)
(venv) > python hoge.py
[WDM] - ====== WebDriver manager ======
[WDM] - Current edge version is 102.0.1245
[WDM] - Get LATEST edgedriver version for 102.0.1245 Edge
[WDM] - Driver [C:\Users\(ユーザ名)\SeleniumWebDriver\.wdm\drivers\edgedriver\win64\102.0.1245.39\msedgedriver.exe] found in cache
Traceback (most recent call last):
File "C:\(仮想環境作成場所)\venv-hoge\package\hoge.py", line 20, in <module>
driver = webdriver.Edge(service=service)
File "C:\(仮想環境作成場所)\venv-hoge\lib\site-packages\selenium\webdriver\edge\webdriver.py", line 62, in __init__
super(WebDriver, self).__init__(DesiredCapabilities.EDGE['browserName'], "ms",
File "C:\(仮想環境作成場所)\venv-hoge\lib\site-packages\selenium\webdriver\chromium\webdriver.py", line 92, in __init__
RemoteWebDriver.__init__(
File "C:\(仮想環境作成場所)\venv-hoge\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 275, in __init__
self.start_session(capabilities, browser_profile)
File "C:\(仮想環境作成場所)\venv-hoge\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 365, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "C:\(仮想環境作成場所)\venv-hoge\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 430, in execute
self.error_handler.check_response(response)
File "C:\(仮想環境作成場所)\venv-hoge\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 211, in check_response
raise exception_class(value)
selenium.common.exceptions.WebDriverException: Message: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<!-- FileName: index.html
Language: [en]
-->
<!--Head-->
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<meta http-equiv="X-UA-Compatible" content="IE=7" />
<title>McAfee Web Gateway - Notification</title>
<script src="/mwg-internal/de5fs23hu73ds/files/javascript/sw.js" type="text/javascript" ></script>
<link rel="stylesheet" href="/mwg-internal/de5fs23hu73ds/files/default/stylesheet.css" />
</head>
<!--/Head-->
<!--Body-->
<body onload="swOnLoad();">
<table class='bodyTable'>
<tr>
<td class='bodyData' background='/mwg-internal/de5fs23hu73ds/files/default/img/bg_body.gif'>
<!--Logo-->
<table class='logoTable'>
<tr>
<td class='logoData'>
<a href='http://www.mcafee.com'>
<img src='/mwg-internal/de5fs23hu73ds/files/default/img/logo_mwg.png'></a>
</td>
</tr>
</table>
<!--/Logo-->
<!--Contents-->
<!-- FileName: cannotconnect.html
Language: [en]
-->
<!--Title-->
<table class='titleTable' background='/mwg-internal/de5fs23hu73ds/files/default/img/bg_navbar.jpg'>
<tr>
<td class='titleData'>
Cannot Connect
</td>
</tr>
</table>
<!--/Title-->
<!--Content-->
<table class="contentTable">
<tr>
<td class="contentData">
The proxy could not connect to the destination in time.
</td>
</tr>
</table>
<!--/Content-->
<!--Info-->
<table class="infoTable">
<tr>
<td class="infoData">
<b>URL: </b><script type="text/javascript">break_line("http://localhost:53851/session");</script><br />
<p class="proxyErrorData">Failure Description: :cannotconnect:server state 1:state 9:Application response 502 cannotconnect</p>
</td>
</tr>
</table>
<!--/Info-->
<!--/Contents-->
<!--Policy-->
<table class='policyTable'>
<tr>
<td class='policyHeading'>
<hr>
Company Acceptable Use Policy
</td>
</tr>
<tr>
<td class='policyData'>
This is an optional acceptable use disclaimer that appears on every page. You may change the wording or remove this section entirely in index.html.
</td>
</tr>
</table>
<!--/Policy-->
<!--Foot-->
<table class='footTable'>
<tr>
<td class='helpDeskData' background='/mwg-internal/de5fs23hu73ds/files/default/img/bg_navbar.jpg'>
For assistance, please contact your system administrator.
</td>
</tr>
<tr>
<td class='footData'>
generated <span id="time">2022-06-14 18:59:51</span> by McAfee Web Gateway
<br />
selenium/4.2.0 (python windows)
</td>
</tr>
</table>
<!--/Foot-->
</td>
</tr>
</table>
</body>
<!--/Body-->
</html>
HTML部分を.html
に保存してブラウザで開いたイメージは以下
自分で試したこと
webdriver.DesiredCapabilities.EDGE['proxy']
の指定
参考URL : Selenium - 日本語ドキュメント
# ドライバの立ち上げ
以下を修正
# ドライバの立ち上げ
PROXY = "社内のプロキシサーバ:ポート番号"
webdriver.DesiredCapabilities.EDGE['proxy'] = {
"httpProxy": PROXY,
"ftpProxy": PROXY,
"sslProxy": PROXY,
"proxyType": "MANUAL",
}
driver = webdriver.Edge(service=service)
結果は変わらず。
Selenium3
だった時
# coding: utf-8
import os
from selenium import webdriver
from webdriver_manager.microsoft import EdgeChromiumDriverManager
from msedge.selenium_tools import Edge
# ブラウザの最新ドライバを%USERPROFILE%\SeleniumWebDriverに配置
driverDir = os.environ['USERPROFILE'] + "\\SeleniumWebDriver\\"
# フォルダが無ければ作成
if not os.path.exists(driverDir):
os.makedirs(driverDir)
# ドライバ配置
driverPath = EdgeChromiumDriverManager(path=driverDir).install()
# ドライバの立ち上げ
driver = Edge(executable_path=driverPath)
これでブラウザを起動できている。