gpt4 book ai didi

javascript - CasperJS 在 NodeList 中返回空元素

转载 作者:行者123 更新时间:2023-11-29 17:18:28 24 4
gpt4 key购买 nike

这是我正在运行的脚本:

//Require CasperJS
var casper = require('casper').create();

//Scraping Courserank
var base = "https://www.courserank.com";
var home = base + "/w/home";
var schools = base + "/w/schools?switchSchool=1";

//First, navigate to homepage and login
casper.start(home, function() {
console.log('Logging in...');
//Fill in the login form
this.fill(
'form[action="login"]',
{ username : 'hatboysam@gmail.com', password : "****" },
true
);
});

function getSchools() {
var arr = document.querySelectorAll('div.link');
return arr;
}

//Go to the schools page
casper.then(function() {
console.log(this.getCurrentUrl());
//Open the school choice page
casper.open(schools).then(function() {
console.log(this.getCurrentUrl());
//Get all school links
var schools_arr = this.evaluate(getSchools);
console.log(schools_arr.length);
Array.prototype.map.call(schools_arr, function(elem) {
console.log(elem.innerHTML);
});
});
});

casper.run();

在 map 调用的内部循环之前一切正常,特别是 console.log(elem.innerHTML)schools_arr 中的许多元素都是空的。如果我在 console.log 语句周围添加一个 if(elem != null) { ... } 一切都很好,但这样就失去了意义。当我在页面上的 Chrome 控制台中运行相同的 document.querySelectorAll 时,NodeList 中的 513 个元素都不为空。 CasperJS 还报告了 513 个元素,但它显示许多元素为空。这里发生了什么?页面是否未完全加载?我以前从未使用过 CasperJS,如果这是一个新手错误,我深表歉意。

最佳答案

您不能使用 evaluate() 从页面上下文返回 native 节点元素;您必须将 Array#map 转换为可使用 JSON.parse 反序列化的内容。

因此您的 getSchools() 函数应该执行如下操作:

function getSchools() {
var arr = document.querySelectorAll('div.link');
return Array.prototype.map.call(arr, function(elem) {
return elem.innerHTML;
});
}

虽然我不知道你可以用节点 innerHTML 字符串内容做什么......所以通常最好将元素映射到你需要的它们的确切属性:

function getSchools() {
var arr = document.querySelectorAll('div.link a');
return Array.prototype.map.call(arr, function(elem) {
return elem.getAttribute('href');
});
}

编辑:按照评论中的要求,获取所有链接的内部文本:

function getSchools() {
var arr = document.querySelectorAll('div.link a');
return Array.prototype.map.call(arr, function(elem) {
return elem.textContent;
});
}

关于javascript - CasperJS 在 NodeList 中返回空元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14794919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com