PhantomJS + jQuery -> 无法获取图像

PhantomJS + jQuery -> Can't get image

问题: page.evaluate 中的函数找不到任何 img(因此,console.log(images.length) 输出 0);但是页面中有很多图片,有的甚至还有id。

问题:发生了什么事?为什么 $('img') 找不到任何东西?

更新 1: 这是一个 <frame> 问题。为了使 jQuery 脚本正常工作,我不得不切换到框架。

详情: 我是 运行 一个用于访问网页 (link) 并获取所有可用图像的 phantomjs 脚本。它首先保存页面的屏幕截图以供比较,然后它应该通过每个 <img> 标签(使用 jQuery $('img'))并获取图像尺寸,并使用 phantomjs 的 page.clipRect, 它将每个图像保存在一个文件夹中。

var page = require('webpage').create();
var url = 'http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/cnpjreva_solicitacao.asp';

page.open(url, function (status) {

    console.log("Status: " + status);
            if (status === "success") {
        page.render('example.png');
    }

    // Asynchronous call!
    page.includeJs('http://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js', function () {

        console.log('\n Evaluate Page \n');
        // Sandboxed
        var images = page.evaluate(function () {
            var images = [];
            function getImgDimensions($i) {
                return {
                    top: $i.offset().top,
                    left: $i.offset().left,
                    width: $i.width(),
                    height: $i.height(),
                }
            }
            $('img').each(function () {
                var img = getImgDimensions($(this));
                images.push(img);
            });

            return images;
        });
        console.log(images.length);


        images.forEach(function (imageObj, index, array) {
            page.clipRect = imageObj;
            page.render('images/' + index + '.png');
        });

        // Exit the session
        phantom.exit();
    });
});

我看过该网站。您想要的 img 位于 iframe 内。您首先需要切换到它。

使用示例:

page.switchToChildFrame(0);

切换到第一个子框架。在调用 page.includeJs().

之前执行此操作

如果你之后想在父页面做一些事情,你必须用 page.switchToParentFrame(); 改回来。