如何强制phantomjs完成导航

时间:2015-09-15 03:28:00

标签: c# selenium phantomjs

我有一个问题,我的phantomjs加载一个网站太慢,总是至少60秒,但在google.com等其他网站上只需不到1秒。

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
    ...
}

有没有办法强制它在达到某一点后完成加载,以便脚本继续?

2 个答案:

答案 0 :(得分:2)

我现在看到你在问什么。您有一个很长的加载页面,您希望在相关的东西加载后停止。我遇到了一些与我们工作的网站相同的问题,但我没有尝试过程序化解决方案。对不起,我不知道幻影,但我发现了一些我觉得有用的链接。

我接近它的方法是等待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密钥。老实说,我不知道这是否会奏效,但这是我要开始的地方。希望它能让你开始。

答案 1 :(得分:0)

我刚刚发现了幻像加载速度太慢的原因,因为目标网络上有太多的扩展程序,广告......所以我切换到chrome并使用像Running Selenium WebDriver using Python with extensions (.crx files)这样的广告块