简体   繁体   English

Selenium ChromeDriverManager Webdriver 安装不通过代理更新

[英]Selenium ChromeDriverManager Webdriver Install not updating through proxy

I need to access a website using selenium and Chrome using python.我需要使用 selenium 和 Chrome 使用 python 访问网站。 Below is shortened version of my code.下面是我的代码的缩短版本。

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service

# PROXY='https://myproxy.com:3128'
PROXY = 'https://username:password@myproxy.com:3128'
proxyuser='username' #this is the proxy user name used in above string
proxypwd='password' #this is the proxy password used in above string


chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server=%s' % PROXY)
chrome_options.add_argument("ignore-certificate-errors");

chrome = webdriver.Chrome(options=chrome_options,service=Service(ChromeDriverManager().install()))

chrome.get("https://www.google.com")
while True:
    print('ok')

I am behind a corporate proxy server which requires authentication.我在需要身份验证的公司代理服务器后面。 I am not sure how to pass login credentials and proxy settings for Install of chromedriver When above code is run without proxy, it works as expected.我不确定如何传递登录凭据和代理设置以安装 chromedriver 当上面的代码在没有代理的情况下运行时,它按预期工作。 But it gives error as follows when run using proxy connection:但是使用代理连接运行时会出现如下错误:

[WDM] - ====== WebDriver manager ======
[WDM] - Current google-chrome version is 105.0.5195
[WDM] - Get LATEST chromedriver version for 105.0.5195 google-chrome
Traceback (most recent call last):
  File "D:\Python\Python39\lib\site-packages\urllib3\connectionpool.py", line 703, in urlopen
    httplib_response = self._make_request(
  File "D:\Python\Python39\lib\site-packages\urllib3\connectionpool.py", line 386, in _make_request
    self._validate_conn(conn)
  File "D:\Python\Python39\lib\site-packages\urllib3\connectionpool.py", line 1040, in _validate_conn
    conn.connect()
  File "D:\Python\Python39\lib\site-packages\urllib3\connection.py", line 414, in connect
    self.sock = ssl_wrap_socket(
  File "D:\Python\Python39\lib\site-packages\urllib3\util\ssl_.py", line 449, in ssl_wrap_socket
    ssl_sock = _ssl_wrap_socket_impl(
  File "D:\Python\Python39\lib\site-packages\urllib3\util\ssl_.py", line 493, in _ssl_wrap_socket_impl
    return ssl_context.wrap_socket(sock, server_hostname=server_hostname)
  File "D:\Python\Python39\lib\ssl.py", line 500, in wrap_socket
    return self.sslsocket_class._create(
  File "D:\Python\Python39\lib\ssl.py", line 1040, in _create
    self.do_handshake()
  File "D:\Python\Python39\lib\ssl.py", line 1309, in do_handshake
    self._sslobj.do_handshake()
ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "D:\Python\Python39\lib\site-packages\requests\adapters.py", line 489, in send
    resp = conn.urlopen(
  File "D:\Python\Python39\lib\site-packages\urllib3\connectionpool.py", line 785, in urlopen
    retries = retries.increment(
  File "D:\Python\Python39\lib\site-packages\urllib3\util\retry.py", line 550, in increment
    raise six.reraise(type(error), error, _stacktrace)
  File "D:\Python\Python39\lib\site-packages\urllib3\packages\six.py", line 769, in reraise
    raise value.with_traceback(tb)
  File "D:\Python\Python39\lib\site-packages\urllib3\connectionpool.py", line 703, in urlopen
    httplib_response = self._make_request(
  File "D:\Python\Python39\lib\site-packages\urllib3\connectionpool.py", line 386, in _make_request
    self._validate_conn(conn)
  File "D:\Python\Python39\lib\site-packages\urllib3\connectionpool.py", line 1040, in _validate_conn
    conn.connect()
  File "D:\Python\Python39\lib\site-packages\urllib3\connection.py", line 414, in connect
    self.sock = ssl_wrap_socket(
  File "D:\Python\Python39\lib\site-packages\urllib3\util\ssl_.py", line 449, in ssl_wrap_socket
    ssl_sock = _ssl_wrap_socket_impl(
  File "D:\Python\Python39\lib\site-packages\urllib3\util\ssl_.py", line 493, in _ssl_wrap_socket_impl
    return ssl_context.wrap_socket(sock, server_hostname=server_hostname)
  File "D:\Python\Python39\lib\ssl.py", line 500, in wrap_socket
    return self.sslsocket_class._create(
  File "D:\Python\Python39\lib\ssl.py", line 1040, in _create
    self.do_handshake()
  File "D:\Python\Python39\lib\ssl.py", line 1309, in do_handshake
    self._sslobj.do_handshake()
urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(10054, 'An existing connection was forcibly closed by the remote host', None, 10054, None))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "D:\eclipse-workspace\Essential Training\test.py", line 17, in <module>
    chrome = webdriver.Chrome(options=chrome_options,service=Service(ChromeDriverManager().install()))
  File "D:\Python\Python39\lib\site-packages\webdriver_manager\chrome.py", line 37, in install
    driver_path = self._get_driver_path(self.driver)
  File "D:\Python\Python39\lib\site-packages\webdriver_manager\core\manager.py", line 29, in _get_driver_path
    binary_path = self.driver_cache.find_driver(driver)
  File "D:\Python\Python39\lib\site-packages\webdriver_manager\core\driver_cache.py", line 95, in find_driver
    driver_version = driver.get_version()
  File "D:\Python\Python39\lib\site-packages\webdriver_manager\core\driver.py", line 42, in get_version
    self.get_latest_release_version()
  File "D:\Python\Python39\lib\site-packages\webdriver_manager\drivers\chrome.py", line 44, in get_latest_release_version
    resp = self._http_client.get(url=latest_release_url)
  File "D:\Python\Python39\lib\site-packages\webdriver_manager\core\http.py", line 31, in get
    resp = requests.get(url=url, verify=self._ssl_verify, **kwargs)
  File "D:\Python\Python39\lib\site-packages\requests\api.py", line 73, in get
    return request("get", url, params=params, **kwargs)
  File "D:\Python\Python39\lib\site-packages\requests\api.py", line 59, in request
    return session.request(method=method, url=url, **kwargs)
  File "D:\Python\Python39\lib\site-packages\requests\sessions.py", line 587, in request
    resp = self.send(prep, **send_kwargs)
  File "D:\Python\Python39\lib\site-packages\requests\sessions.py", line 701, in send
    r = adapter.send(request, **kwargs)
  File "D:\Python\Python39\lib\site-packages\requests\adapters.py", line 547, in send
    raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(10054, 'An existing connection was forcibly closed by the remote host', None, 10054, None))

Bypassing proxy is not possible because of corporate policies由于公司政策,无法绕过代理

request("get", url, params=params, **kwargs)

this line in errors i believe is the issue.我认为这条错误线是问题所在。 it seems the driver is not able to determine the new version available on net as the request function here should have proxy settings - i am not able to see the **kwargs values, ideally - i believe, **kwargs should have proxy argument.似乎驱动程序无法确定网络上可用的新版本,因为此处的请求 function 应该有代理设置 - 我无法看到 **kwargs 值,理想情况下 - 我相信,**kwargs 应该有代理参数。 - i am not sure but. - 我不确定,但是。

I have modified the code as follows.我已将代码修改如下。 essentially i have now used custom download manager and this is worling基本上我现在已经使用了自定义下载管理器,这很正常

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.core.download_manager import WDMDownloadManager
from webdriver_manager.core.http import HttpClient
from selenium.webdriver.chrome.service import Service
from requests import Response
import urllib3
import requests
import os
os.environ['WDM_SSL_VERIFY'] = '0'
capabilities = webdriver.DesiredCapabilities.CHROME
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

PROXY = "https://username:password@myproxy.com:3128"
proxyuser='username'
proxypwd='password'
opt = webdriver.ChromeOptions()
opt.add_argument('--proxy-server=%s' % PROXY)
opt.add_argument("ignore-certificate-errors")

class CustomHttpClient(HttpClient):
    def get(self, url, params=None) -> Response:
        proxies={'http': 'http://username:password@myproxy.com:3128',
         'https': 'http://username:password@myproxy.com:3128',
         }
        return requests.get(url, params,proxies=proxies,verify=False)

http_client = CustomHttpClient()
download_manager = WDMDownloadManager(http_client)
chrome = webdriver.Chrome(service=Service(ChromeDriverManager(download_manager=download_manager).install()),options=opt)

chrome.get("https://www.google.com")
while True:
    print('ok')

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Selenium Webdriver 导入 ChromeDriverManager 错误 - Selenium Webdriver Import ChromeDriverManager Error 在,selenium 自动化与 python,用于 webdriver_manager.chrome 和 ChromeDriverManager - In, selenium automation with python, for webdriver_manager.chrome and ChromeDriverManager ChromeDriverManager().install() 不起作用。 (WebDriver 管理器) - ChromeDriverManager().install() doesn't work. (WebDriver manager) 无法通过命令提示符安装 Selenium WebDriver - Unable to install Selenium WebDriver through command prompt 通过代理连接到selenium-server:4444 a的Webdriver - Webdriver connected to selenium-server:4444 a through proxy 通过&#39;sudo pip install -U selenium&#39;更新selenium失败 - Updating selenium through 'sudo pip install -U selenium' fails Selenium安装Marionette webdriver - Selenium install Marionette webdriver 为什么即使在通过 Selenium 和 Python 使用 ChromeDriverManager 之后路径中的“chromedriver”可执行文件也没有 - Why isn't the 'chromedriver' executable in the PATH even after using ChromeDriverManager through Selenium and Python Python Selenium Webdriver - 代理身份验证 - Python Selenium Webdriver - Proxy Authentication 在phantomjs中使用代理(Selenium WebDriver) - Using a proxy with phantomjs (selenium webdriver)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM