splinter:如何添加chrome选项?

时间:2016-06-08 08:14:10

标签: selenium selenium-chromedriver splinter

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

selenium.common.exceptions.WebDriverException: Message: chrome not reachable

在跑步的时候,我得到了这样的例外:

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()

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

--disable-setuid-sandbox

这项工作正常,不同之处在于添加到Chrome驱动程序的chrome-sandbox选项,如果选项未添加,chromium-browser下会有一个僵尸chrome.options.Option进程。

问题在于,我不知道如何将splinter.Browser()实例传递给splinter/driver/webdriver/chrome.py,我浏览了splinter.Browser()下的实现,似乎没有条目将此类实例传递给{{1}}。是否有其他方法可以将选项传递给chrome驱动程序?

4 个答案:

答案 0 :(得分:2)

创建BaseWebDriver的新实例,并使用Chrome驱动程序的实例设置.driver。此示例启动Chrome最大化:

from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
from splinter.driver.webdriver import BaseWebDriver, WebDriverElement

options = Options()
options.add_argument('--start-maximized')

browser = BaseWebDriver()
browser.driver = Chrome(chrome_options=options)

browser.visit('https://www.google.com')

答案 1 :(得分:1)

我能做到这一点的唯一方法就是将add_argument方法与selenium.webdriver.ChromeOptions一起使用,如下所示:

from selenium.webdriver import ChromeOptions
from splinter import Browser

chrome_options = ChromeOptions()
chrome_options.add_argument(your_argument)

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

所以在您的代码中将是:

from splinter import Browser
from selenium.webdriver import ChromeOptions
from pyvirtualdisplay import Display #I'm not certain what this is...

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

chrome_options = ChromeOptions()
chrome_options.add_argument('disable-setuid-sandbox')

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

d.stop()

注意:我无法使用您的参数进行测试,因为我最近破坏了我的GRUB,因此我陷入了Windows,disable-setuid-sandbox选项仅限于Linux。但是,我已经将此方法与headless参数一起使用了一段时间。

答案 2 :(得分:0)

我不是百分之百确定这会起作用,但我只是查看了分裂的文档,它说。

  

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

查看Splinter调用的源代码浏览器可以采用一些参数。然后将传递这些参数以创建Chrome WebDriver的实例。所以我去了selenium源代码,看到构造函数看起来像这样:

def __init__(self, executable_path="chromedriver", port=0,
                 chrome_options=None, service_args=None,
                 desired_capabilities=None, service_log_path=None):

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

opt = Options()
opt.add_argument('--disable-setuid-sandbox')
b = Browser(browser='chrome', chrome_options=opt)

修改 或者,您也可以根据需要传递选项:

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

答案 3 :(得分:0)

过去几周我一直在分裂分叉,如果你愿意,你可以查看我的开发分支。我添加了这个和其他功能。

选项可以作为列表传递给string url = "http://www.merriam-webster.com/dictionary/sample"; UriBuilder ub = new UriBuilder(url); MessageBox.Show(ub.Host.Replace("www.","")); 参数

chrome_options

修改

事实证明,只需使用from splinter import Browser options = ['--start-maximized', '--disable-setuid-sandbox'] with Browser('chrome', chrome_options=options) as browser: browser.visit('http://www.google.com') 就可以通过分裂来实现这一点,**kwargs将各种可用选项传递给selenium驱动程序。例如:

from splinter import Browser

options = {'chrome_options':['--start-maximized', '--disable-setuid-sandbox']}

with Browser('chrome', **options) as browser:
    browser.visit('http://www.google.com')