2015-09-15 2 views
-1

У меня проблема с тем, что мои phantomjs загружают один сайт слишком медленно, всегда не менее 60 секунд, хотя на других сайтах, таких как google.com, требуется менее 1 секунды.Как заставить phantomjs закончить навигацию

PhantomJSDriverService service = PhantomJSDriverService.CreateDefaultService(); 
service.IgnoreSslErrors = true; 
service.LoadImages = false; 
service.ProxyType = "none"; 
service.HideCommandPromptWindow = true; 

using (IWebDriver driver = new PhantomJSDriver(service)) 
{ 
    driver.Navigate().GoToUrl("http://abc.xyz"); //blocks too long 
    ... 
} 

Есть ли способ заставить его закончить загрузку после достижения некоторой точки, чтобы сценарий продолжился?

+0

При просмотре этой одной сайт вручную, так же медленно? Возможно, это просто сайт, а не сценарий. – JeffC

+0

Спасибо за ваш ответ. На сайте есть DomContentLoaded: 5.7s, а завершение - около 60 секунд, как указано выше. Вот почему я думаю, что если есть способ загрузить только некоторые части, такие как достижение моей целевой таблицы id = "abc", остальное не важно. Похоже, что это не так, потому что драйвер блокирует и ждет завершения загрузки страницы. –

ответ

0

Я только что узнал, причины, по которым phantomjs нагрузка очень медленно, потому что цель полотно имеет слишком много расширений, объявления ... поэтому я переключаюсь на хром и использование Adblock как Running Selenium WebDriver using Python with extensions (.crx files)

2

Я вижу, что вы просите сейчас. У вас есть длинная страница загрузки, которую вы хотите остановить после загрузки соответствующих материалов. Я сталкиваюсь с той же проблемой с некоторыми сайтами, которые у нас есть на работе, но я не пробовал программное решение. Извините, я не знаю phantomjs, но я нашел некоторые ссылки, которые, я думаю, были бы полезными.

Способ, которым я хотел бы подойти, это дождаться события DOMContentLoaded, чтобы запустить его, а затем отправить ESC на страницу. По крайней мере, это то, что я делаю вручную, чтобы остановить длинные файлы загрузки, которые меня не волнуют, так что выполнение может продолжаться.

Я нашел этот вопрос How can I wait for the page to be ready in PhantomJS? Вот соответствующая часть:

var page = require('webpage').create(); 
var system = require('system'); 

page.onInitialized = function() { 
    page.onCallback = function(data) { 
     console.log('Main page is loaded and ready'); 
     //Do whatever here 
    }; 

    page.evaluate(function() { 
     document.addEventListener('DOMContentLoaded', function() { 
      window.callPhantom(); 
     }, false); 
     console.log("Added listener to wait for page ready"); 
    }); 
}; 

page.open('https://www.google.com', function(status) {}); 

После обнаружения DOMContentLoaded, используйте sendkeys() отправить ключ ESC. Я честно не знаю, будет ли это работать, но я начну. Надеюсь, вам это поможет.