使用 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' : [] })
我正在尝试在 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' : [] })