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();
改回来。
问题: 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();
改回来。