我试图让伪娘进入页面中的所有标签并加载它们,将它们添加到数组中并返回它。我的操纵up的版本是1.5.0。这是我的代码:
module.exports.scrapeLinks = async (page, linkXpath) => {
page.waitForNavigation();
linksElement = await page.$x(linkXpath);
var url_list_arr = [];
console.log(linksElement.length);
i=1;
for(linksElementItem in linksElement)
{
const linksData = await page.$x('(' + linkXpath + ')[' + (i + 1) +']');
if (linksData.length > 0) {
linksData[0].click();
console.log(page.url());
url_list_arr.push(page.url());
}
else {
throw new Error('Link not found');
}
}
return url_list_arr;
};
但是有了这段代码,我得到了一个
UnhandledPromiseRejectionWarning:错误:节点不可见或 不是HTMLElement
我还通过文档发现无法使用page.click函数上的xpath。反正有实现这一目标的方法吗?
如果有一个功能可以从页面获取所有链接,也可以,但是我在文档中找不到它。
答案 0 :(得分:2)
要获取数组中所有a
标签的句柄:
const aTags= await page.$$('a')
通过以下方式遍历他们:
for (const aTag of aTags) {...}
在循环内部,您可以分别与每个elementHandle
进行交互。
请注意
await aTag.click()
当导航页面上下文时,将销毁(回收)所有elementHandles
。在这种情况下,您需要一种变通方法,例如在循环中加载初始页面,以始终从新实例开始。