如何用phantom.js刮取javascript注入的图片src和alt?[英] How to scrape javascript injected image src and alt with phantom.js?

问题描述

我正在使用以下脚本通过 phantom.js 抓取图像:

var page = require('webpage').create();
url = 'https://www.everlane.com/collections/mens-luxury-tees/products/mens-crew-antique'

page.open(url, function(status) {

if (status !== 'success') {
    console.log('error');
    phantom.exit();
    return;
}

var a = page.evaluate(function() {
        return document.getElementsByTagName('img');
    });

SrcAlt = [];
for (var i=0; i<a.length; i++){
    var src = a[i].getAttribute('src');
    var alt = a[i].getAttribute('alt');
    SrcAlt.push({"src": src, "alt": alt});
}
console.log(SrcAlt);
phantom.exit();
});

但是,脚本在我定义变量 a 后挂起,这意味着它不会遍历并返回 src 和 alt 属性.当我 console.log(a) 它返回 34,所以我相信我有适当的图像资源.如何访问 src 和 alt 信息?谢谢!

推荐答案

您需要在页面加载完成后评估您的页面.您可以通过使用 page.onLoadFinished 回调来做到这一点.在所有页面内容加载完成并且文档准备就绪后调用此回调.像这样的东西应该可以工作:

var page = require('webpage').create();
var url = 'https://www.everlane.com/collections/mens-luxury-tees/products/mens-crew-antique';

page.open(url);

page.onLoadFinished = function()
{
    var a = page.evaluate(function() {
        return document.getElementsByTagName('img');
    });

    SrcAlt = [];
    for (var i=0; i<a.length; i++){
        var src = a[i].getAttribute('src');
        var alt = a[i].getAttribute('alt');
        SrcAlt.push({"src": src, "alt": alt});
    }

    console.log(SrcAlt);
    phantom.exit();
}

本文地址:https://www.itbaoku.cn/post/1740187.html