Javascript querySelectorAll仅显示奇数值
我正在尝试使用木偶师来刮取数据。一切正常,但当我使用querySelectorAll运行循环时,只有奇数值存储在数据数组中Javascript querySelectorAll仅显示奇数值,javascript,Javascript,我正在尝试使用木偶师来刮取数据。一切正常,但当我使用querySelectorAll运行循环时,只有奇数值存储在数据数组中 const result = await page.evaluate(() => { let data = []; //array to hold data let elements = document.querySelectorAll('.sortabletable tbody tr'); for (let element of elem
const result = await page.evaluate(() => {
let data = []; //array to hold data
let elements = document.querySelectorAll('.sortabletable tbody tr');
for (let element of elements) {
let provider = element.childNodes[1].innerText;
let address = element.childNodes[2].innerText;//this value is not showing
let city = element.childNodes[3].innerText;
let zip = element.childNodes[4].innerText;//this value is not showing
let country = element.childNodes[5].innerText;
let phone = element.childNodes[6].innerText;//this value is not showing
let type = element.childNodes[7].innerText;
data.push({
provider,
address,
city,
zip,
country,
phone,
type
}); // Push an object with the data onto our array
}
return data; // Return our data array
});
我打赌这是因为元素之间有文本节点,而文本节点没有您要查找的
innerText
:
let elements=document.querySelectorAll('.sortabletbody tr');
for(让元素中的元素){
log(element.childNodes[1].innerText);
log(element.childNodes[2].innerText);
log(element.childNodes[3].innerText);
log(element.childNodes[4].innerText);
}
值0值1
价值2
价值3
它们始终是任何标记中的文本或值
节点,因此当您获取元素时。childrenNodes
将返回由组成的数组,该数组存储子元素,例如[text,td,text,td,text,td]
现在,如果在数组上循环,您将发现要从中获取innerText的标记位于奇数位置,而对于其他偶数位置,innerText的值是未定义的
例如。如果你想创造一个
<p id='ps'>
Ankit
<a>raj</a>
<a>rahul</a>
amit
</p>
这也将为您提供相同的,即[text,a,text,a,text]
这表明每个元素内部可能都有文本节点
建议:
您应该使用子节点
而不是子节点
例如:
现在您也可以从0开始。我已尝试使用您的两种方法。非常感谢你的建议。
const ele = document.getElementById('ps');
console.log(ele.childNodes);
let provider = element.children[0].innerText;
let address = element.children[1].innerText;
let city = element.children[2].innerText;
let zip = element.children[3].innerText;
let country = element.children[4].innerText;
let phone = element.children[5].innerText;
let type = element.children[6].innerText;