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

我尝试制作隐藏的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); 

错误信息:

WebDriver.dll中发生未处理的“OpenQA.Selenium.NoSuchElementException”类型exception

附加信息:{“errorMessage”:“无法找到带有xpath的元素’// [@id =’_ fZl’] / span / svg / path’”,“request”:{“headers”:{“Accept”:“ application / json,image / png“,”Connection“:”Close“,”Content-Length“:”57“,”Content-Type“:”application / json; charset = utf-8“,”Host“:”本地主机:50454 “},” httpVersion “:” 1.1″ , “方法”: “POST”, “后”: “{\”使用\ “:\”的xpath \ “\ ”值\“:\” // [@id = ‘_ FZL’] /量程/ SVG /路径\ “}”, “URL”: “/元件”, “urlParsed”:{ “锚”: “”, “查询”: “”, “文件” “元件”, “目录”: “/”, “路径”: “/元件”, “相对的”: “/元件”, “端口”: “”, “宿主”: “”, “密码”:” ”, “用户”: “”, “用户信息”: “”, “权威”: “”, “协议”: “”, “源”: “/元件”, “queryKey”:{}, “块”: [ “元件”]} “urlOriginal”: “/会话/ feab13f0-720f-11e7-80b3-452aee308158 /元件”}}

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

我解决了 首先,我们可以使用PhantomJS而不通过此代码显示其控制台:

 IWebDriver driver; var driverService = PhantomJSDriverService.CreateDefaultService(); driverService.HideCommandPromptWindow = true; driver = new PhantomJSDriver(driverService); 

第二个是我提到的错误。 Google会为浏览器返回不同的HTML页面,因此PhantomJS浏览器中的Id或Xpath将与我在打开Firefox时导出的不同。 我用的时候

 string html=driver.PageSource; 

要知道正确的XPath或Id是什么,findElementfunction运行良好。

例如:对于Google网站结果FirefoxDriver中的第一个链接的XPath是

 "//*[@id='rso']/div/div/div[1]/div/div/h3/a" 

PhantomJSDriver中的第一个链接XPath是

 "//*[@id='ires']//ol/div[1]/h3/a" 

自Linux版本55+和Windows&OSX版本56+以来,Firefox支持-headless命令行选项。 它应该像这样使用 :

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

C#中的相应代码是 :

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

因为.NET包装器不支持.headless属性 。

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

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

你有两个选择:

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

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