如何在python webdriver中为phantomjs / ghostdriver设置代理?

我想弄清楚如何通过HTTP代理路由我的请求。

我正在初始化webdriver像这样:

user_agent = 'my user agent 1.0' DesiredCapabilities.PHANTOMJS['phantomjs.page.settings.userAgent'] = user_agent driver = webdriver.PhantomJS() 

我已经通过文档和源代码,似乎无法find一种方法来使用代理服务器phantomjs通过webdriver。

有什么build议么?

下面是如何在Python中为PhantomJs设置代理的示例。 您可以更改代理types:socks5 / http。

 service_args = [ '--proxy=127.0.0.1:9999', '--proxy-type=socks5', ] browser = webdriver.PhantomJS('../path_to/phantomjs',service_args=service_args) 

我挖了一点,我发现function在那里,但它没有暴露。 所以它需要一个方便的猴子扳手来修补它。 这个解决scheme适用于我,直到在webdriver调用中完全暴露这个function。

编辑:它似乎service_args现在暴露,你不再需要猴子补selenium使用代理…请参阅@ alex-czech如何使用的答案。

 from selenium import webdriver from selenium.webdriver.phantomjs.service import Service as PhantomJSService phantomjs_path = '/usr/lib/node_modules/phantomjs/lib/phantom/bin/phantomjs' # monkey patch Service temporarily to include desired args class NewService(PhantomJSService): def __init__(self, *args, **kwargs): service_args = kwargs.setdefault('service_args', []) service_args += [ '--proxy=localhost:8080', '--proxy-type=http', ] super(NewService, self).__init__(*args, **kwargs) webdriver.phantomjs.webdriver.Service = NewService # init the webdriver self.driver = webdriver.PhantomJS(phantomjs_path) # undo monkey patch webdriver.phantomjs.webdriver.Service = PhantomJSService 

以下设置也是有用的,尤其是在使用可能需要很长时间才能加载的代理时。

 max_wait = 60 self.driver.set_window_size(1024, 768) self.driver.set_page_load_timeout(max_wait) self.driver.set_script_timeout(max_wait) 

以下是如何对Ruby中的Webdriver进行相同的操作。 我无法在网上find这个地方,直到我挖掘到源代码:

 phantomjs_args = [ '--proxy=127.0.0.1:9999', '--proxy-type=socks5'] phantomjs_caps = { "phantomjs.cli.args" => phantomjs_args } driver = Selenium::WebDriver.for(:phantomjs, :desired_capabilities => phantomjs_caps) 

我最终需要在service_args和proxy-auth标头中传递凭证。 我不相信phantomjs正确传递代理身份validation。

 service_args = [ "--ignore-ssl-errors=true", "--ssl-protocol=any", "--proxy={}".format(proxy), "--proxy-type=http", ] caps = DesiredCapabilities.PHANTOMJS authentication_token = "Basic " + base64.b64encode(b'{}:{}'.format(username, password)) caps['phantomjs.page.customHeaders.Proxy-Authorization'] = authentication_token self.driver = webdriver.PhantomJS( service_args=service_args, desired_capabilities=caps, executable_path="./phantomjs-2.1.1-linux-x86_64/bin/phantomjs") 

代理的结构定义为http://username:password@domain:port

我猜测第一个auth参数不会作为头传递给代理,所以您需要手动执行这两个操作。