首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >splinter:如何添加chrome选项?

splinter:如何添加chrome选项?
EN

Stack Overflow用户
提问于 2016-06-08 16:14:10
回答 4查看 5.6K关注 0票数 5

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

代码语言:javascript
复制
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()

在运行过程中,我得到了如下异常:

代码语言:javascript
复制
selenium.common.exceptions.WebDriverException: Message: chrome not reachable

我在selenium中测试了相同的函数,并添加了一些chrome选项:

代码语言:javascript
复制
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()

这行得通,不同的是在chrome驱动中添加了--disable-setuid-sandbox选项,如果不添加该选项,在chromium-browser下将会有一个僵尸chrome-sandbox进程。

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

EN

回答 4

Stack Overflow用户

发布于 2016-06-08 22:29:52

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

代码语言:javascript
复制
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')
票数 2
EN

Stack Overflow用户

发布于 2017-11-17 12:53:11

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

代码语言:javascript
复制
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()

所以在你的代码中应该是:

代码语言:javascript
复制
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参数一起使用已经有一段时间了。

票数 1
EN

Stack Overflow用户

发布于 2016-06-08 16:39:16

我不能百分之百确定这是否会起作用,但我刚刚看了关于splinter的文档,它说。

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

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

代码语言:javascript
复制
def __init__(self, executable_path="chromedriver", port=0,
                 chrome_options=None, service_args=None,
                 desired_capabilities=None, service_log_path=None):

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

代码语言:javascript
复制
opt = Options()
opt.add_argument('--disable-setuid-sandbox')
b = Browser(browser='chrome', chrome_options=opt)

编辑或者,您也可以根据需要的功能传递选项:

代码语言:javascript
复制
opt = Options()
opt.add_argument('--disable-setuid-sandbox')
dc = opt.to_capabilities()
b = Browser(browser='chrome', desired_capabilities=dc)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37696854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档