我正在使用jquerygo库使用phantomjs,我正在尝试这个。
我在phantomjs中意识到:
执行是沙盒,网页无法访问幻像对象,无法探测自己的设置
但是我应该能够从评估中返回一个简单的字符串吗? 但这不起作用。我的代码如下:
var photogsScrapeCount = function(url, callback){
console.log("LOADED PHOTOGSSCRAPE Count");
url = decodeURIComponent(url);
//$.config.site = 'https://www.magnumphotos.com/';
$.config.addJQuery = false;
$.visit(url, function() {
$.waitForElement(".7n7np102",function() {
$.getPage(function(page) {
var imgCounterMinus = page.evaluate(function(){
$(".7n7np102 a").click(); // open the image enlarge
var temp = setTimeout(function(){
imgCounterMinus1 = $("span[id$='TotalPageCount_Lbl']").html();
imgCounterMinus1 = imgCounterMinus1.split(" ");
imgCounterMinus1 = imgCounterMinus1[2];
imgCounterMinus1 = parseInt(imgCounterMinus1);
console.log("imgCounterMinus1" + imgCounterMinus1);
return (imgCounterMinus1 - 3);
}, 4000);
return temp;
});
//console.log("After evaluate: " + imgCounterMinus)
});
});
});
};
这可以通过任何不同的方式实现吗?网站的基本示例正在运行,所以我假设setTimeout给我带来了问题。 任何想法或建议都会非常有用,因为我在编写jquery,Js。
方面经验很少答案 0 :(得分:0)
docs say(强调我的):
首先,这个库不是jQuery的完整API镜像。每个API 异步(由于它与Phantom.js的交互),因此存在一些差异。
还有一个例子必须如何使用page.evaluate()
。结果未返回,但传递给第二个回调。除了使用回调之外,没有办法从函数的异步执行中返回一些东西。所以setTimeout
语法也是错误的。
$(".7n7np102 a").click(function(){
setTimeout(function(){
$.getPage(function(page) {
page.evaluate(function(){
var imgCounterMinus1 = $("span[id$='TotalPageCount_Lbl']").html();
imgCounterMinus1 = imgCounterMinus1.split(" ");
imgCounterMinus1 = imgCounterMinus1[2];
imgCounterMinus1 = parseInt(imgCounterMinus1);
console.log("imgCounterMinus1" + imgCounterMinus1);
return (imgCounterMinus1 - 3);
}, function(err, result){
console.log("After evaluate: " + result);
callback();
$.close();
});
});
}, 4000);
});