使用 Remote Webdriver 时 PhantomJS 代理?

PhantomJS Proxy when using Remote Webdriver?

我正在尝试在 python 中使用 selenium 和 PhantomJS。我是 运行 一个 selenium hub 服务器,所以我使用 webdriver.Remote 来启动一个 webdriver。

将代理传递给 PhantomJS 的正常方法是:

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

这不适用于

webdriver.Remote(service_args=service_args)

因为 webdriver.Remote 只接受 desired_capabilities,而不是服务参数。

有什么方法可以将代理作为 desired_capibility 传递给 PhantomJS?

使用 Firefox 网络驱动程序的典型方法行不通。

由于 PhantomJS 实例已经运行,将命令行选项传递给 RemoteDriver 构造函数没有意义。还是有办法的。

PhantomJS 本身支持通过 phantom.setProxy(ip, port, type, un, pw) 配置代理的编程方式(未记录,但自 PhantomJS 2 起可用)。这必须在 phantom 上下文中执行,所以 driver.execute_script() 在这里不起作用。

GhostDriver 接受这样的脚本,这些脚本将通过一个特殊的命令在 phantom 上下文中执行,您可以像这样调用该命令 (source):

driver.command_executor._commands['executePhantomScript'] = ('POST', '/session/$sessionId/phantom/execute')
driver.execute('executePhantomScript', {'script': '''phantom.setProxy("10.0.0.1", 12345);''', 'args' : [] })