Javascript 在Chrome Puppeter中获取XPath列表的正确方法

Javascript 在Chrome Puppeter中获取XPath列表的正确方法,javascript,node.js,xpath,promise,puppeteer,Javascript,Node.js,Xpath,Promise,Puppeteer,我正在使用Chrome Puppeter获取网页上的一些内容。此内容是伪表中的项目列表。我正在使用XPath获取此内容 当我测试Xpath表达式[在带有Xpath助手扩展的Chrome中]时,它显示了文本列表,所以我知道Xpath表达式很好 然而,我在试着用木偶演员做这件事时遇到了问题。以下是相关代码[我省略了木偶演员代码的开头和结尾]: var xpath_expr_str = "//div[contains(@class,'listings')]/div[4]/p/a"; var page_

我正在使用Chrome Puppeter获取网页上的一些内容。此内容是伪表中的项目列表。我正在使用XPath获取此内容

当我测试Xpath表达式[在带有Xpath助手扩展的Chrome中]时,它显示了文本列表,所以我知道Xpath表达式很好

然而,我在试着用木偶演员做这件事时遇到了问题。以下是相关代码[我省略了木偶演员代码的开头和结尾]:

var xpath_expr_str = "//div[contains(@class,'listings')]/div[4]/p/a";
var page_url_str = 'https://my-url';

await page.goto(page_url_str);
await page.waitForXPath(xpath_expr_str);

var xpath_payload_arr = await page.$x(xpath_expr_str);
var xpath_val_arr = await page.evaluate(function(payload_arr){
    var url_list_arr = [];
    for(var i = 0; i < payload_arr.length; i++)
    {
        url_list_arr.push(payload_arr[i].textContent);
    }
    return url_list_arr;
}, xpath_payload_arr);

console.log(xpath_val_arr);

使用Puppeter时,管理XPath列表的正确方法是什么?

不幸的是,您无法将XPath\u payload\u arr传递到page.evaluate中,因为它是一个复杂的对象,显然包含对自身的引用

但是,我们可以在节点上下文和页面中对其进行迭代。逐个评估项目:

var xpath_expr_str = '//*[@id="questions"]/div/div/h3/a';
var page_url_str = 'https://stackoverflow.com/questions/tagged/puppeteer';

await page.goto(page_url_str);
await page.waitForXPath(xpath_expr_str);

var xpath_payload_arr = await page.$x(xpath_expr_str);

var url_list_arr = [];
for(var i = 0; i < xpath_payload_arr.length; i++)
{
    url_list_arr.push(await page.evaluate(el => el.textContent, xpath_payload_arr[i]));
}

console.log(url_list_arr);
这将产生预期的结果:


不幸的是,您无法将xpath_payload_arr传递到page.evaluate中,因为它是一个复杂的对象,显然包含对自身的引用

但是,我们可以在节点上下文和页面中对其进行迭代。逐个评估项目:

var xpath_expr_str = '//*[@id="questions"]/div/div/h3/a';
var page_url_str = 'https://stackoverflow.com/questions/tagged/puppeteer';

await page.goto(page_url_str);
await page.waitForXPath(xpath_expr_str);

var xpath_payload_arr = await page.$x(xpath_expr_str);

var url_list_arr = [];
for(var i = 0; i < xpath_payload_arr.length; i++)
{
    url_list_arr.push(await page.evaluate(el => el.textContent, xpath_payload_arr[i]));
}

console.log(url_list_arr);
这将产生预期的结果:


超级的Thx很多,很好的建议!超级的Thx很多,很好的建议!