2016-12-12 8 views
0

Эти результаты стабильны с колебаниями менее 0,500 с.
Это занимает 16.779 сек работать на PhantomJSDriver
Это занимает 13.991 сек работать на ChromeDriver
Почему ChromeDriver работает намного лучше, чем PhantomJSDriver

Это код, который я бегу:

//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 
    { 
    }  
} 

Только 4 из 29 элементов существуют.

PhantomsJS выбрасывает исключение «элемент не найдено» 25 раз на выходе.
Можно ли ожидать, что PhantomJS будет работать намного дольше?

ответ

2

Существует лучший способ сделать это ... вы ищете родительский элемент, а затем захватываете каждого, кто ищет элемент-потомк, который может или не может существовать. Просто измените свой CSS-селектор, чтобы получить только те элементы, которые вы хотите. См. Обновленный код ниже.

Вместо использования var, вы всегда должны использовать определенный тип. Это делает код более читаемым.

С помощью этого кода вам не нужен try-catch, поэтому я удалил его. Это должно быть намного быстрее.

BTW, ваше неявное ожидание установлено на 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); 
} 
Смежные вопросы