【问题标题】:Phantomjs can't load iframePhantomjs 无法加载 iframe
【发布时间】:2017-06-01 09:34:42
【问题描述】:

我是新手,最近开始使用 phantomjs 和 casperjs。我想从 iframe 获取信息,但 phantomjs 无法加载它。

这是我的脚本:

var casper = require('casper').create({
   verbose: true,
   logLevel: "debug",
   waitTimeout: 20000,
   retryTimeout: 100,
   viewportSize: {
     width: 1920,
     height: 1080
   },
   pageSettings: {
       "userAgent": 'Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1'
   },
   localToRemoteUrlAccessEnabled: true
});

casper.start();

casper.open('http://www.badboysbarber.ru/online');

casper.waitForSelector('.y-main-container', function() {
   this.echo("Selector appeared.");
});

casper.then(function() {
   this.capture('screen.png');
});

casper.run();

所以,phantom 会抛出错误(尽管选择器定义正确):

[error] [phantom] Wait timeout of 20000ms expired, exiting.

有人可以帮帮我吗?也许我做错了什么?谢谢。

【问题讨论】:

    标签: javascript iframe web-scraping phantomjs casperjs


    【解决方案1】:

    iframe 在另一个文档中加载一个文档。如果您想使用框架并使用 CasperJS 获取数据,您可能需要 withFrame() in Casper.prototype

    以下脚本捕获主页中第一个 iframe 的原始 HTML 内容:

    var casper = require('casper').create({
      viewportSize: {
        width: 1920,
        height: 1080
      },
      pageSettings: {
        'userAgent': 'Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1'
      },
      localToRemoteUrlAccessEnabled: true
    });
    
    casper.start('http://www.badboysbarber.ru/online');
    
    casper.withFrame(0, function () {
      this.echo(this.getHTML()); // HTML code of the first iframe
    });
    
    casper.run();
    

    【讨论】:

    • 抱歉,即使您使用 withFrame 函数,它也无法加载 iframe。只需尝试在 withFrame 函数中使用this.captureSelector('selector.png', '.y-main-container'); 而不是this.echo(this.getHTML());,您就会看到。这就是问题的全部。
    • 另外你也可以看看this topic
    • 如果你能得到HTML代码,iframe显然已经加载了。您只是对capture 有疑问。我用 SlimerJS 在withFrame 中尝试了this.capture('screenshot.png');,我可以看到iframe,不仅在 SlimerJS 处理页面时,而且在生成的屏幕截图上:imgur.com/a/gWtiY
    • 实际上,这个 iframe 中只加载了进度条图标和 css/script 链接,而不是 iframe 的整个 HTML 代码。似乎在 iframe 中对内容加载有一些 ajax 调用,也使用了 AngularJS。正如我在 PhantomJS 挂断 iframe 加载之前所说的那样,对我来说,它显示带有进度条图标而不是 iframe 内容的白色空白框。这真的不是bug吗?
    • 我会试试 SlimerJS。由于您的屏幕截图上有一个正确加载的页面,它也应该对我有用。谢谢你的帮助。
    猜你喜欢
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 2017-02-21
    • 2016-10-19
    相关资源
    最近更新 更多