Puppeteer获取指定选择器href属性返回全null如何解决
错误原因
你的代码存在以下问题导致返回全null结果:
- 核心逻辑错误:选择器匹配的目标是
div元素,href是<a>标签的专属属性,div本身不存在这个属性,直接读取自然全部返回null。播客的跳转URL实际挂载在这个div嵌套的子级<a>标签上。你看到的3*3null矩阵是控制台对长度为9的数组的打印折叠效果,本质就是9个匹配到的div都读不到href值。 - 语法缺失:你贴出的代码没有闭合
getList函数的花括号,也没有添加getList()调用语句,本地运行时需要补全这部分代码才能正常执行。
修正方案
直接把选择器的匹配目标改成对应div内部的<a>标签即可,补全语法后的完整代码如下:
const puppeteer = require("puppeteer") const getList = async () => { const browser = await puppeteer.launch({ headless: false, args: [ '--proxy-server=firewall.ina.fr:81' ] }) const page = await browser.newPage() await page.goto("https://www.lesonunique.com/podcasts") await page.waitForSelector('div.block3-content.block3-content-modif') const urls = await page.evaluate(() => Array.from( // 匹配目标div下的跳转a标签 document.querySelectorAll('div.block3-content.block3-content-modif a'), link => link.href )); console.log(urls); console.log(urls[1]); // 执行完成后关闭浏览器实例 await browser.close() } // 调用函数启动爬取 getList()
如果运行后出现个别链接漏抓,优先检查卡片div内是否存在多个a标签,给a标签加上对应类名缩小选择范围即可,也可以先选中div再通过
div.querySelector('a').href的方式取主链接,避免选中无关的a标签。
内容的提问来源于stack exchange,提问作者8oris
相关产品推荐
相关产品推荐

