Я провожу несколько тестов с WebDriver и Firefox.
У меня возникла проблема со следующей командой:
WebDriver.get(www.google.com);
С помощью этой команды WebDriver блокируется до тех пор, пока не будет запущено событие onload. Хотя обычно это занимает секунды, на веб-сайтах, которые никогда не заканчивают загрузку, на это могут уйти часы.
Что я хотел бы сделать, так это остановить загрузку страницы после определенного тайм-аута, каким-то образом имитируя кнопку остановки Firefox.
Сначала я пытался выполнять следующий код JS каждый раз, когда пытался загрузить страницу:
var loadTimeout=setTimeout(\"window.stop();\", 10000);
К сожалению, это не работает, вероятно, потому что:
Из-за порядка загрузки сценариев метод stop() не может остановить загрузку документа, в котором он содержится, 1.
ОБНОВЛЕНИЕ 1: я пытался использовать SquidProxy, чтобы добавить время ожидания соединения и запроса, но проблема осталась.
Одна странная вещь, которую я обнаружил сегодня, заключается в том, что один веб-сайт, который никогда не переставал загружаться на моем компьютере (FF3.6 - 4.0 и Mac Os 10.6.7), нормально загружался в других браузерах и/или компьютерах.
ОБНОВЛЕНИЕ 2: проблему, по-видимому, можно решить, указав Firefox не загружать изображения. надеюсь после этого все заработает...
Я бы хотел, чтобы у WebDriver был лучший драйвер Chrome, чтобы использовать его. Firefox разочаровывает меня каждый день!
ОБНОВЛЕНИЕ 3: в Selenium 2.9 добавлена новая функция для обработки случаев, когда драйвер зависает. Это можно использовать с FirefoxProfile
следующим образом:
FirefoxProfile firefoxProfile = new ProfilesIni().getProfile("web");
firefoxProfile.setPreference("webdriver.load.strategy", "fast");
Я опубликую, работает ли это после того, как попробую.
ОБНОВЛЕНИЕ 4: в конце ни один из вышеперечисленных методов не сработал. Я заканчиваю тем, что "убью" потоки, которые требуют много времени для завершения. Я планирую попробовать Ghostdriver, который представляет собой удаленный веб-драйвер, использующий PhantomJS в качестве серверной части. PhantomJS — это безголовый сценарий WebKit, поэтому я ожидаю, что у него не будет проблем с настоящим браузером, таким как Firefox. Для людей, которые не обязаны использовать firefox (для сканирования), я сообщу о результатах.
ОБНОВЛЕНИЕ 5: Время для обновления. Используя в течение 5 месяцев ghostdriver 1.1 вместо FirefoxDriver, я могу сказать, что я действительно доволен его производительностью и стабильностью. У меня было несколько случаев, когда у нас не было надлежащего поведения, но, похоже, в целом ghostdriver достаточно стабилен. Поэтому, если вам, как и мне, нужен браузер для сканирования/скрапинга, я рекомендую вам использовать ghostdriver вместо firefox и xvfb, которые доставят вам несколько головных болей...