为什么ChromeDriver比PhantomJSDriver表现更好

时间:2016-12-12 19:54:24

标签: c# selenium phantomjs selenium-chromedriver

这些结果稳定,波动小于0.500秒 在PhantomJSDriver上运行需要16.779秒 在ChromeDriver上运行需要13.991秒

这是我正在运行的代码:

//Starts Browser, Hides PhantomJS window and Navigates to Page
var driverService = PhantomJSDriverService.CreateDefaultService();
driverService.HideCommandPromptWindow = true;
Browser = new PhantomJSDriver(driverService);

Browser.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromMilliseconds(1));

//Navigates to the website
Browser.Navigate().GoToUrl("https://www.aapmegaform.com.au/racing/scratchings-and-conditions.aspx");

var lineElements = Browser.FindElements(By.CssSelector(".tableContentContainerInnerBox>div>table>tbody>tr"));


foreach (var element in lineElements)
{
     try
     {
         Console.WriteLine(element.FindElement(By.CssSelector(".scratchingTitle")).Text);
     }
     catch
     {
     }       
}

29个元素中只有4个存在。

PhantomsJS在输出中抛出“未找到元素”异常25次 期望PhantomJS运行更长时间是否合理?

1 个答案:

答案 0 :(得分:2)

有一个更好的方法来执行此操作...您正在搜索父元素,然后抓住每个元素,寻找可能存在或不存在的后代元素。只需更改CSS选择器即可获得所需的元素。请参阅下面的更新代码。

您应该始终使用特定类型,而不是使用var。它使代码更具可读性。

使用此代码,您不应该try-catch,因此我已将其删除。这也应该快得多。

顺便说一句,您的隐式等待时间设置为1毫秒。等待那么简短,真的没有任何意义。当它检查它是否已过期时,它已经过期。也许你打算用1s代替?您不应该需要隐式等待下面的代码。在几乎所有情况下,我都建议不要使用隐式等待。我会根据需要添加显式等待(WebDriverWait)。

Browser.Navigate().GoToUrl("https://www.aapmegaform.com.au/racing/scratchings-and-conditions.aspx");
IReadOnlyCollection<IWebElement> lineElements = Browser.FindElements(By.CssSelector("h3.scratchingTitle"));
foreach (IWebElement element in lineElements)
{
    Console.WriteLine(element.FindElement(By.CssSelector(".scratchingTitle")).Text);
}