我在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()在运行过程中,我得到了如下异常:
selenium.common.exceptions.WebDriverException: Message: chrome not reachable我在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()这行得通,不同的是在chrome驱动中添加了--disable-setuid-sandbox选项,如果不添加该选项,在chromium-browser下将会有一个僵尸chrome-sandbox进程。
这里的问题是,我不知道如何将chrome.options.Option实例传递给splinter.Browser(),我浏览了splinter/driver/webdriver/chrome.py下的实现,似乎没有将这样的实例传递给splinter.Browser()的入口。有没有其他方法可以将选项传递给chrome驱动程序?
发布于 2016-06-08 22:29:52
创建一个新的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')发布于 2017-11-17 12:53:11
我唯一能做到这一点的方法就是在selenium.webdriver.ChromeOptions中使用add_argument方法,如下所示:
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参数一起使用已经有一段时间了。
发布于 2016-06-08 16:39:16
我不能百分之百确定这是否会起作用,但我刚刚看了关于splinter的文档,它说。
您还可以传递与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)https://stackoverflow.com/questions/37696854
复制相似问题