【问题标题】:How to force phantomjs to finish navigating如何强制phantomjs完成导航
【发布时间】:2015-09-15 03:28:00
【问题描述】:

我有一个问题,我的 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
    ...
}

有什么方法可以强制它在到达某个点后完成加载,以便脚本继续执行?

【问题讨论】:

  • 当您手动浏览到那个站点时,它是否一样慢?也许这只是网站而不是脚本。
  • 感谢您的回复。该站点的 DomContentLoaded: 5.7s,完成时间如上所述约为 60s。这就是为什么我认为如果有办法只加载一些部分,比如达到我的目标表 id="abc" ,其余部分并不重要。似乎没有办法这样做,因为驱动程序会阻塞并等待页面加载完成。

标签: c# selenium phantomjs


【解决方案1】:

我明白你现在在问什么。您有一个很长的加载页面,您想在相关内容加载后停止。我在我们工作的一些网站上遇到了同样的问题,但我还没有尝试过编程解决方案。抱歉,我不知道 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 键。老实说,我不知道这是否可行,但这是我要开始的地方。希望它能帮助您入门。

【讨论】:

    【解决方案2】:

    我刚刚找到了 phantomjs 加载这么慢的原因,因为目标网站有太多的扩展、广告......所以我切换到 chrome 并使用像 Running Selenium WebDriver using Python with extensions (.crx files) 这样的 adblock

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-08
      • 1970-01-01
      • 1970-01-01
      • 2018-02-18
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多