如何在PhantomDriver(无头浏览器)中隐藏FirefoxDriver(使用Selenium)而没有findElement函数错误?

时间:2017-07-21 08:43:02

标签: c# selenium phantomjs automated-tests selenium-firefoxdriver

我尝试制作隐藏的FirefoxDriver。根据我的研究,我必须使用PhantomJSDriver但是当我使用PhantomJSDriver时,driver.FindElement语句不再起作用。

        var options = new PhantomJSOptions();       
        options.AddAdditionalCapability("phantomjs.page.settings.userAgent", 
        "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) 
        Chrome/40.0.2214.94 Safari/537.36");
        PhantomJSOptions p = new PhantomJSOptions();           
        var service = PhantomJSDriverService.CreateDefaultService();
        service.SslProtocol = "any";
        service.ProxyType = "http";
        service.WebSecurity = false;
        service.IgnoreSslErrors = true;
        var driver = new PhantomJSDriver(service, options);
        driver.Navigate().GoToUrl("https://www.google.com.tr/");
        Thread.Sleep(5000);
        driver.FindElement(By.XPath("//*[@id='lst-ib']")).SendKeys("edd");          
        string s = driver.Url;
        Console.WriteLine(s);

错误讯息:

未处理的类型' OpenQA.Selenium.NoSuchElementException'发生在WebDriver.dll

其他信息: {" errorMessage":"无法找到带有xpath的元素' // [@ id =' _fZl'] / span / svg / path&#39 ;","请求":{"标题":{"接受":" application / json,image / png", "连接":"关闭"" Content-Length的":" 57""内容类型":& #34;应用/ JSON;字符集= UTF-8""主机":"本地主机:50454"}" httpVersion":" 1.1""方法":" POST""后":" {\"使用\&#34 ;: \"的xpath \" \"值\":\" // [@ ID =' _fZl'] /跨度/ SVG /路径\"}"" URL":" /元件"" urlParsed" {"锚&# 34;:"""查询":"""文件":"元件"&# 34;目录":" /""路径":" /元件""相对于":" /元素""端口":"""主机":"""密码&#34 ;: """使用者":""" USERINFO":"""权威& #34 ;: """协议":"""源":" /元件"" queryKey":{},"大块":["元件"]}" urlOriginal":" /会话/ feab13f0-720f-11E7 -80b3-452aee308158 /元件"}}

还有其他隐藏FirefoxDriver的方法吗? 你能帮帮我吗?

2 个答案:

答案 0 :(得分:1)

Since version 55+ for Linux and 56+ for Windows & OSX, Firefox supports the -headless command line option. It shall be used like this:

o = selenium.webdriver.FirefoxOptions()
o.set_headless()
driver=selenium.webdriver.Firefox(options=o)

The corresponding code in C# would be:

var o = new FirefoxOptions()
o.AddArgument('-headless')
var driver = new FirefoxDriver(o)

Because the .NET wrapper doesn't support the .headless property.

答案 1 :(得分:0)

本身无法隐藏FirefoxDriver。您可以在虚拟机上运行它并最小化vm窗口,但这对大多数人来说都不实用。

让我们来看看你真正的问题。看起来Google正在使用js分配搜索框的ID以防止抓取,因为它违反了他们的服务条款。

你有几个选择:

1)使用名称'q'定位元素,因为无论phantomjs还是firefox,它都被命名为。

2)直接进入搜索结果页面:https://www.google.com.tr/search?q=edd