当前位置: 首页 > 知识库问答 >
问题:

如何在python webdriver中为chrome设置代理?

酆君墨
2023-03-14

我正在使用以下代码:

profile = webdriver.FirefoxProfile()
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.http", "proxy.server.address")
profile.set_preference("network.proxy.http_port", "port_number")
profile.update_preferences()
driver = webdriver.Firefox(firefox_profile=profile)

python webdriver中为FF设置代理。这适用于FF。如何在Chrome中设置这样的代理?我找到了这个exmaple,但不是很有帮助。当我运行脚本时,什么都没有发生(Chrome浏览器没有启动)。

共有3个答案

金骞尧
2023-03-14

我也有同样的问题。ChromeOptions非常奇怪,因为它没有像您想象的那样与所需的功能集成。我忘记了确切的细节,但基本上ChromeOptions将根据您是否通过了所需的功能指令重置为默认值。

我做了下面的猴子补丁,它允许我指定自己的dict,而不用担心色度变化的复杂性

在/selenium/webdriver/chrome/webdriver中更改以下代码。py:

def __init__(self, executable_path="chromedriver", port=0,
             chrome_options=None, service_args=None,
             desired_capabilities=None, service_log_path=None, skip_capabilities_update=False):
    """
    Creates a new instance of the chrome driver.

    Starts the service and then creates new instance of chrome driver.

    :Args:
     - executable_path - path to the executable. If the default is used it assumes the executable is in the $PATH
     - port - port you would like the service to run, if left as 0, a free port will be found.
     - desired_capabilities: Dictionary object with non-browser specific
       capabilities only, such as "proxy" or "loggingPref".
     - chrome_options: this takes an instance of ChromeOptions
    """
    if chrome_options is None:
        options = Options()
    else:
        options = chrome_options

    if skip_capabilities_update:
        pass
    elif desired_capabilities is not None:
        desired_capabilities.update(options.to_capabilities())
    else:
        desired_capabilities = options.to_capabilities()

    self.service = Service(executable_path, port=port,
        service_args=service_args, log_path=service_log_path)
    self.service.start()

    try:
        RemoteWebDriver.__init__(self,
            command_executor=self.service.service_url,
            desired_capabilities=desired_capabilities)
    except:
        self.quit()
        raise 
    self._is_remote = False

改变的只是“skip_capabilities_update”的夸格。现在我这样做只是为了给自己下结论:

capabilities = dict( DesiredCapabilities.CHROME )

if not "chromeOptions" in capabilities:
    capabilities['chromeOptions'] = {
        'args' : [],
        'binary' : "",
        'extensions' : [],
        'prefs' : {}
    }

capabilities['proxy'] = {
    'httpProxy' : "%s:%i" %(proxy_address, proxy_port),
    'ftpProxy' : "%s:%i" %(proxy_address, proxy_port),
    'sslProxy' : "%s:%i" %(proxy_address, proxy_port),
    'noProxy' : None,
    'proxyType' : "MANUAL",
    'class' : "org.openqa.selenium.Proxy",
    'autodetect' : False
}

driver = webdriver.Chrome( executable_path="path_to_chrome", desired_capabilities=capabilities, skip_capabilities_update=True )
王长卿
2023-03-14

它为我工作...

from selenium import webdriver

PROXY = "23.23.23.23:3128" # IP:PORT or HOST:PORT

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server=http://%s' % PROXY)

chrome = webdriver.Chrome(chrome_options=chrome_options)
chrome.get("http://whatismyipaddress.com")
衡高寒
2023-03-14
from selenium import webdriver

PROXY = "23.23.23.23:3128" # IP:PORT or HOST:PORT

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server=%s' % PROXY)

chrome = webdriver.Chrome(options=chrome_options)
chrome.get("http://whatismyipaddress.com")
 类似资料:
  • 问题内容: 我可以如下设置Firefox的代理设置。 但是我也需要设置Chrome。.有人可以帮助我怎么做吗? 谢谢拉吉 问题答案: 您可以尝试使用该类,如下所示:

  • 我想通过代码强制Chrome调试器中断一行,或者使用某种注释标记,比如。

  • 我正在使用Selenium WebDrive,在Chrome浏览器中使用C#进行自动化。我需要检查我的网页是否被阻挡在某些地区(一些ip范围)。所以我必须在我的Chrome浏览器中设置一个代理。我尝试了下面的代码。代理正在设置,但我得到一个错误。有人能帮我吗? 运行此代码时,我在Chrome浏览器中收到以下消息:我试图启用代理选项,但“更改代理设置”选项被禁用。 *无法连接到代理服务器 代理服务器

  • 问题内容: 我正在尝试运行我的Selenium Java代码来测试网页。但是由于网络限制,网页无法加载。当我手动设置代理并在浏览器中单击URL时,它可以正常工作。现在,我需要在运行selenium代码时传递那些代理设置。请帮我。 我尝试下面的代码,但仍然显示相同的错误: 问题答案: 问题已通过以下代码解决-

  • proxy.conf.js在开发模式下按预期工作。 我在package.json文件中有这些文件用于启动和构建。 在我运行“NPM run Build”并使用结果文件在IIS8上托管网站后,需要使用代理设置的页面就不工作了。 例如,我的请求https://localhost/web/api/webclients/authentication应该转到https://10.109.102.109/we

  • 问题内容: 我想强制Chrome调试器 通过代码 或使用某种注释标签(例如)来中断一行 代码。 问题答案: 您可以在代码中使用。如果开发者控制台已打开,则执行将中断。它也可以在萤火虫中使用。