2016-06-08 54 views
4

我使用linux下的網絡測試分裂(v0.7.3),而鉻,默認的示例代碼不能在運行:分裂:如何添加鉻選項?

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 

我測試相同功能的硒與一些鍍鉻選項添加:

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

該工程確定,所不同的是--disable-setuid-sandbox選項添加到鉻驅動程序,如果選項不添加,將有一個殭屍chrome-sandbox進程chromium-browser

這裏的問題是,我不知道如何將chrome.options.Option實例傳遞給splinter.Browser(),我瀏覽了實施splinter/driver/webdriver/chrome.py下,似乎沒有進入到這樣一個實例傳遞給splinter.Browser()。有沒有其他方式可以將選項傳遞給Chrome驅動程序?

回答

0

我不是100%確定這會起作用,但我只是看着分裂的文檔,它說。

您還可以傳遞對應於Selenium DesiredCapabilities參數的其他參數。

尋找分裂調用瀏覽器的源代碼可以採取一些參數。這些參數將被傳遞來創建一個Chrome WebDriver的實例。於是我去了硒源代碼,看到的構造是這樣的:

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) 
+0

你能告訴我鏈接嗎?我搜索了[文檔](https://splinter.readthedocs.io/en/latest/index.html),有一個'desired_capabilities',但只適用於firefox,不幸的是,'chrome_options'不適用於我目前的分裂版本(0.7.3)。 – coanor

+0

@coanor它在Remote WebDiver的文檔中(https://splinter.readthedocs.io/en/latest/drivers/remote.html)我認爲它不同於Chrome WebDriver,因爲它同時創建了一個同一瀏覽器類的實例。你有沒有嘗試我的建議? – RemcoW

+0

@coanor以下是瀏覽器類的源代碼https://github.com/cobrateam/splinter/blob/master/splinter/browser.py。正如你所看到的,它只不過是創建一個ChromeWebDriver並傳遞* args和** kwargs。所以這意味着你可以傳遞由Selenium WebDriver使用的參數,該參數在https://github.com/SeleniumHQ/selenium/blob/master/py/selenium/webdriver/chrome/webdriver.py#L34 – RemcoW

2

創建的BaseWebDriver一個新的實例,並設置.driver與Chrome驅動程序的一個實例。本示例啓動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') 
+0

Interresting,但我試過,我有惱人的問題,絕望地尋找一種方法來控制Chrome語言,因爲chromedriver不會定義喜好。我的Ubuntu的語言環境是法語,所以它就像安裝時使用法語作爲默認語言,我無法控制這從分裂,這使我的測試失敗... – Richard

0

我一直工作在分裂的過去幾周叉子,你可以看看我的Dev分支,如果你想要的。我已經添加了這個和其他功能。

選項可以作爲一個列表被傳遞給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其通過各種可用的選項給硒司機。例如:

from splinter import Browser 

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

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

我所能做到這一點的唯一方法是通過使用add_argumentselenium.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,所以我被困在窗口中,並且disable-setuid-sandbox選項僅適用於linux 。但是,我一直在用headless這個參數來使用這個方法。