我在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驱动程序?
答案 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')