2016-03-09 69 views
1

我發現這https://bitbucket.org/chromiumembedded/cef/wiki/UsingChromeDriver鏈接,它具有java綁定cef客戶端和Selenium驅動程序。綁定cefSharp客戶端與硒鉻驅動程序c#

所以我準備了一個給我使用它與C#窗口應用程序。我所做的是創建一個新的winapp項目86只包含與沒有錯誤或問題,運行下面的代碼:

using CefSharp; 
using CefSharp.WinForms; 
namespace ClientBrowser 
{ 
    public partial class Form1 : Form 
    { 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    public ChromiumWebBrowser browser; 
    private void Form1_Load(object sender, EventArgs e) 
    { 
     var settings = new CefSettings(); 
     settings.CefCommandLineArgs.Add("enable-npapi", "1"); 
     settings.IgnoreCertificateErrors = true; 
     //settings.CefCommandLineArgs.Add("enable-system-flash", "1"); 
     Cef.Initialize(settings); 
     browser = new ChromiumWebBrowser(""); 
     this.Controls.Add(browser); 
     browser.Dock = DockStyle.Fill; 
    } 
    } 
} 

以上項目是作爲CEF客戶端以下新winapp項目低於86:

private void Form1_Load(object sender, EventArgs e) 
    { 
     try { 
      var options = new ChromeOptions(); 
      options.BinaryLocation = @"path/ClientBrowser.exe"; 
      //options.AddArgument("--log-level=3"); 
      var service = ChromeDriverService.CreateDefaultService(); 
      //service.HideCommandPromptWindow = true; 
      driver = new ChromeDriver(service,options); //chromedriver.exe 

      driver.Navigate().GoToUrl("http://stackoverflow.com/"); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
    } 

現在,當我運行新以上項目,

chromedriver.exe說:

Starting ChromeDriver 2.21.371459 (36d3d07f660ff2bc1bf28a75d1cdabed0983e7c4) on port 57883 Only local connections are allowed.

然後

ClientBrowser.exe打開了與它無任何顯示沒有遇到錯誤,但60秒後,我得到:

The HTTP request to the remote WebDriver server for URL http://localhost:57883/session timed out after 60 seconds.

,但它應該打開http://stackoverflow.com/對我來說,我不知道我在做什麼錯,我沒有包含任何selenium-server-standalone-x.y.z.jar?我是否需要這個,如果是的話,請任何一個讓我知道如何包括它。

也試圖與Administrator Privilege

運行它,有沒有辦法直接綁定ChromeDriverChromiumWebBrowser,所以就沒有必要cefclient.exe

也試圖與RemoteWebDriver

 try { 
      var options = new ChromeOptions(); 
      options.BinaryLocation = @"C:\pathto\ClientBrowser.exe"; 
      options.AddArgument("--remote-debugging-port=1131"); 
      options.AddArgument("url=data:,"); 
      //options.AddArgument("--log-level=3"); 

      var service = ChromeDriverService.CreateDefaultService(); 
      //service.HideCommandPromptWindow = true; 
      service.Port = 1131; 
      service.Start(); 

      DesiredCapabilities capabilities = new DesiredCapabilities(); 
      capabilities.SetCapability(ChromeOptions.Capability, options); 

      driver = new RemoteWebDriver(service.ServiceUrl, capabilities); //DesiredCapabilities.Chrome() 

      //driver = new ChromeDriver(service,options); //chromedriver.exe 

      driver.Navigate().GoToUrl("http://stackoverflow.com/"); 

     } 

RemoteWebDriver也沒有爲我工作,現在真的卡住了,請

任何幫助或建議對我和其他想要像我這樣做的人都有很大的幫助,請提前致謝。

+0

@amaitland請你幫助我。 –

+0

我現在沒有時間回答問題。再次閱讀「CEF」文章,你很明顯錯過了一些東西。請不要直接詢問我的幫助。 – amaitland

+0

謝謝,真的很抱歉!直接從你那裏詢問,我會再讀一遍。 –

回答

0

這與鉻嵌入式框架的使用實例:

var service = ChromeDriverService.CreateDefaultService(); 
var options = new ChromeOptions(); 
options.BinaryLocation = @"C:\Users\florent\Downloads\Cef\cefclient.exe"; 
options.AddArgument("url=data:,"); 

var driver = new ChromeDriver(service, options); 
driver.Navigate().GoToUrl("https://www.google.co.uk"); 

你可以在這裏下載最新的版本(測試應用程序):https://cefbuilds.com/

+0

使用'cefclient.exe'並將其作爲'admin'運行,但客戶端包含各種按鈕和地址欄菜單欄等,這些不適合我的場景,我只想簡單的瀏覽器,沒有導航按鈕和菜單等..只是一個瀏覽器,感謝您的回答,我必須問是否有任何方法可以從'cefclient.exe'中刪除它?我的意思是任何'cefclient.exe'只使用普通瀏覽器構建 –

+0

不可以隱藏導航按鈕和菜單,但您可以構建自己的配置。 –

+0

是的,其實..這樣做..只..如果你可以建議我關於構建的東西,這將是很大的幫助..以防止錯誤問題等 –

2

我只是碰到這種偶然花費幾個小時後,試圖實現與OP相同的目標。在對cefclient.exe進行測試時,我也能夠使Selenium正常工作。然而,我試圖測試的基於CEF的模擬應用程序不會玩球,無論我嘗試過哪個端口,Selenium都會超時。

解決方案結果相當簡單。看起來,當您啓動CEF嵌入式瀏覽器時,您可以將URL字符串作爲地址傳遞,也可以將其留空。如果您將其留空,該頁面將爲空。這似乎會導致Selenium超時。如果你添加一個URL,Selenium連接正常,沒有端口設置等是必需的。只是二進制位置開關。所以我的解決方案如下:

內CEF初始化代碼:

_browser = new ChromiumWebBrowser("data:,") 
    { 
     Dock = DockStyle.Fill, 
    }; 

在硒的初始化代碼:

var options = new ChromeOptions { BinaryLocation = "PathToYourCef.exe" }; 

cefDriver = new ChromeDriver(options);