Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用querySelector获取最后一个元素?_Javascript_Puppeteer - Fatal编程技术网

Javascript 如何使用querySelector获取最后一个元素?

Javascript 如何使用querySelector获取最后一个元素?,javascript,puppeteer,Javascript,Puppeteer,我从一个有很多嵌套HTML元素的网站上抓取,但我感兴趣的是abbr元素。在我的例子中,那些abbr元素具有data-utime属性,因此它们被定义为一些其他嵌套的HTML。因此,我想做的是获取页面上最后一个abbr元素的data-utime属性值 我试着这样做: const SELECTOR = 'abbr:last-child'; const result = await page.evaluate((selector) => { return document.querySelec

我从一个有很多嵌套HTML元素的网站上抓取,但我感兴趣的是
abbr
元素。在我的例子中,那些
abbr
元素具有
data-utime
属性,因此它们被定义为
一些其他嵌套的HTML
。因此,我想做的是获取页面上最后一个
abbr
元素的
data-utime
属性值

我试着这样做:

const SELECTOR = 'abbr:last-child';
const result = await page.evaluate((selector) => {
  return document.querySelector(selector);
}, SELECTOR);

console.log(result);
console.log(typeof(res));
console.log(result.getAttribute('data-utime'));

但问题是,在我得到的输出中,
result
只是一个空对象(
{}
),因此
typeof(res)
返回对象,当然它没有
getAttribute
函数。我还认为
last child
选择器是获取页面上最后一个
abbr
元素的正确方法。如何实现我想要的任何想法?

评估
在页面上下文中运行;结果被序列化并返回。改用
$$eval

const SELECTOR = "abbr";
const result =
      await page.$$eval(SELECTOR,
                        (elements) => elements[elements.length - 1].dataset.utime);
console.log(result);

你也可以使用
evaluate
并调用
document.queryselectoral
,但我更喜欢将选择器保存在我的木偶程序代码中,这样我就可以重用它们。

我相信
文档。$$eval
应该是
页面。$$eval
在我的情况下。哦,是的,对不起。因为我错误地建议了
evaluateHandle
,所以赶紧重写。很高兴听到这个消息!