单击页面操纵符中的每个“ a”标签

时间:2018-06-25 15:09:13

标签: node.js xpath puppeteer

我试图让伪娘进入页面中的所有标签并加载它们,将它们添加到数组中并返回它。我的操纵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。反正有实现这一目标的方法吗?

如果有一个功能可以从页面获取所有链接,也可以,但是我在文档中找不到它。

1 个答案:

答案 0 :(得分:2)

要获取数组中所有a标签的句柄:

const aTags= await page.$$('a')

通过以下方式遍历他们:

for (const aTag of aTags) {...}

在循环内部,您可以分别与每个elementHandle进行交互。

请注意

await aTag.click()
当导航页面上下文时,

将销毁(回收)所有elementHandles。在这种情况下,您需要一种变通方法,例如在循环中加载初始页面,以始终从新实例开始。