这些结果稳定,波动小于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运行更长时间是否合理?
答案 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);
}