splinter:如何添加chrome选项?

coa*_*nor 5 selenium selenium-chromedriver splinter

我在linux下使用splinter(v0.7.3)进行Web测试,而在chrome上,默认的示例代码无法运行:

from splinter import Browser
from pyvirtualdisplay import Display

d = Display(visible=0, size=(800, 600))
d.start()

b = Browser('chrome')
b.visit('http://www.google.com')
b.quit()

d.stop()
Run Code Online (Sandbox Code Playgroud)

在运行时,我得到了这样的异常:

selenium.common.exceptions.WebDriverException: Message: chrome not reachable
Run Code Online (Sandbox Code Playgroud)

我在selenium中测试了相同的功能,添加了一些chrome选项:

from selenium import web driver
from selenium.webdriver.chrome.options import Options
from pyvirtualdisplay import Display

d = Display(visible=0, size=(800, 600))
d.start()

opt = Options()
opt.add_argument('--disable-setuid-sandbox')
b = webdriver.Chrome(chrome_options=opt)
b.get('http://www.google.com')
b.quit()

d.stop()
Run Code Online (Sandbox Code Playgroud)

这项工作正常,区别在于--disable-setuid-sandbox添加到chrome驱动程序的选项,如果选项未添加,则会有一个僵尸chrome-sandbox进程chromium-browser.

这里的问题是,我不知道如何传递一个chrome.options.Option实例splinter.Browser(),我浏览下的实现splinter/driver/webdriver/chrome.py,似乎没有条目传递这样的实例splinter.Browser().还有其他方法可以将选项传递给chrome驱动程序吗?

Rem*_*coW 0

我不是 100% 确定这会起作用,但我只是查看了 splinter 的文档,它说。

您还可以传递与 Selenium DesiredCapability 参数相对应的其他参数。

查看 Splinter 调用 Browser 的源代码可以得到一些参数。然后,这些参数将被传递以创建 Chrome WebDriver 的实例。所以我查看了selenium源代码,看到构造函数如下所示:

def __init__(self, executable_path="chromedriver", port=0,
                 chrome_options=None, service_args=None,
                 desired_capabilities=None, service_log_path=None):
Run Code Online (Sandbox Code Playgroud)

chrome_options 有一个参数,因此应该可以使用此参数传递它。所以如果我是正确的,这应该可以正常工作:

opt = Options()
opt.add_argument('--disable-setuid-sandbox')
b = Browser(browser='chrome', chrome_options=opt)
Run Code Online (Sandbox Code Playgroud)

编辑 或者,您也可以将选项作为所需的功能传递:

opt = Options()
opt.add_argument('--disable-setuid-sandbox')
dc = opt.to_capabilities()
b = Browser(browser='chrome', desired_capabilities=dc)
Run Code Online (Sandbox Code Playgroud)