获取 Puppeteer 中 XPath 的所有链接(暂停或不起作用)?

2024-01-06

我需要使用 XPath 选择页面上的所有链接,然后我的 Puppeteer 应用程序才能单击并执行一些操作。我发现该方法(下面的代码)有时会卡住,我的爬虫会暂停。是否有更好/不同的方式从 XPath 获取所有链接?或者我的代码中是否存在不正确的内容并且可能会暂停我的应用程序的进度?

try {
  links = await this.getLinksFromXPathSelector(state);
} catch (e) {
  console.log("error getting links");
  return {...state, error: e};
}

其中调用:

async getLinksFromXPathSelector(state) {
 const newPage = state.page
 // console.log('links selector');
 const links = await newPage.evaluate((mySelector) => {
   let results = [];
   let query = document.evaluate(mySelector,
     document,
     null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
   for (let i=0, length=query.snapshotLength; i<length; ++i) {
     results.push(query.snapshotItem(i).href);
   }
   return results;
 }, state.linksSelector);
  return links;
}

XPath 位于state.linksSelector.


您可以使用page.$x() https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagexexpression计算 XPath 表达式并获得ElementHandle https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#class-elementhandle大批。可能适合使用page.waitForXPath() https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagewaitforxpathxpath-options事先确保将 XPath 字符串指定的元素添加到 DOM 中。

然后你就可以通过ElementHandle https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#class-elementhandle数组元素通过page.evaluate() https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pageevaluatepagefunction-args并返回一个包含以下内容的数组href https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attr-href每个元素的属性值。

const xpath_expression = '//a[@href]';
await page.waitForXPath(xpath_expression);
const links = await page.$x(xpath_expression);
const link_urls = await page.evaluate((...links) => {
  return links.map(e => e.href);
}, ...links);

console.log(link_urls);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取 Puppeteer 中 XPath 的所有链接(暂停或不起作用)? 的相关文章

随机推荐

  • 迭代 std::list 时擦除

    如果我使用的是iterator in a for循环 我用erase在迭代器的当前迭代中 for 循环应该继续良好并访问其余的list元素 根据我的阅读 情况应该是这样 并且是一个主要的区别特征list vs deque or vector
  • 快速过滤元组数组

    我有一个命名元组数组 我想根据元组数组的元素值对此数组应用过滤器 typealias Section sectionName String sectionInputs Input var defaultSectionsData Sectio
  • Numpy Vector (N,1) 维度 -> (N,) 维度转换

    我有一个关于 N 维数组和 N 1 维数组之间转换的问题 例如 y 是 2 维 A np array 1 2 3 4 x np array 1 2 y np dot A x y shape Out 6 2 但下面将显示 y2 为 2 1 维
  • 根据 xml 模式验证 xml 文件

    这是关于根据 XML 模式 例如 schemafile xsd 验证 XML 文件 例如 marshalledfile xml 我们使用 jaxb 将 java 对象编组到 xml 文件中 最好的方法是什么 有人可以举一个简单的例子来说明如
  • MySQL行子查询比较问题

    我有一个小的 mysql 表 MySQL 版本 5 6 23 Field Type Null Key Default Extra id int 6 unsigned NO PRI NULL auto increment dividends
  • 如何恢复Android Fragment视图状态

    我有申请titles片段和contents屏幕上的片段 当用户单击标题片段中的项目时 将创建相应的片段并将其插入到框架中 并且所选标题在标题片段中突出显示 交易完成fragment addToBackStack 所以当用户点击BACK键 恢
  • 如何开始构建 VSTi 插件?

    我想知道构建 VSTi 插件的确切方法是什么 我不希望在短短几周内编写下一个 Massive 因为我不了解 DSP 也没有非常基本的编程技能 我确信这可能高于我目前的水平 但我认为如果我给自己设定一个我非常感兴趣的高目标 我就会成长为一名程
  • Facebook Graph API:在调用 FB.init() 之前调用 FB.login()

    我正在尝试在我的网站上使用新的 Facebook Graph API 这就是我所拥有的 页面上的某处
  • 如何在 Javascript 中映射替换字符(类似于 Perl 中的“tr”函数)?

    我一直在试图弄清楚如何将字符串中的一组字符映射到另一组类似于trPerl 中的函数 I found 这个网站显示了 JS 和 Perl 中的等效功能 http www lemoda net perl perl js perl js html
  • 使用 api.rpc. payment.queryFeeDetails 获取外部费用

    我想用api rpc payment queryFeeDetailsAPI 调用 https polkadot js org docs substrate rpc queryfeedetailsextrinsic bytes at bloc
  • Android NDK 在 CallObjectMethod 调用 getSystemService 中崩溃

    这是我问的另一个问题的后续 Android 从JNI获取MEID https stackoverflow com questions 11643498 android get meid from jni 我正在尝试获取 Android 手机
  • 访问Python列表中的元素

    我的答案列表如下 answers defaultdict
  • 在 R 中使用 tryCatch() 在循环中分配错误值

    我正在努力了解 R 中 tryCatch 的说明 我正在尝试捕获股票的收盘价 案例 2 好案例 TickersJuly2 独特的价格与股票代码关系 情况 1 坏情况 TickersJuly1 FABU 收盘价是 CETX 的重复 对于 FA
  • 以编程方式估计 Android 手机电池耗尽的时间

    因此有一些方法可以通过监听器获取当前的电池电量 但是 这些可以为您提供手机当前电池状态的值 但无法指示电池耗尽的速度有多快 慢 有什么方法可以估计电池耗尽之前的剩余时间 你能做任何知道电压是多少的事情吗 或者也许可以监控一段时间内电池消耗的
  • android recyclerview加载更多按钮[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有教程 示例包含带有 recyclerview 的加载更多按钮 我需要在 recyclerview
  • 控制鼠标键盘Golang?

    如何在操作系统 X11 级别上控制检索 设置鼠标位置并触发键盘事件 这与中的功能类似Java 中的机器人类 http docs oracle com javase 7 docs api java awt Robot html 我知道很可能不
  • 如何在AppBundle中添加视图?

    我正在尝试在 symfony3 中进行实验 我试图在谷歌上搜索它 但我没有找到他们明确的答案 这是 symfony 中的默认控制器 class DefaultController extends Controller Route name
  • Anaconda navigator 和 activate.bat 在 Windows 中出现空格问题

    最近 我突然开始遇到 Anaconda 提示符和使用 VS Code 启动 jupyter 实例的问题 存在 访问被拒绝 错误 但即使作为管理员 我也收到一个错误 该错误提示我路径中存在空格问题 我从来没有遇到过这个问题 并且 anacon
  • discord.py 中的 Cog 和 Extension 有什么区别?

    在discord py文档中 有 扩展 https discordpy readthedocs io en stable ext commands extensions html https discordpy readthedocs io
  • 获取 Puppeteer 中 XPath 的所有链接(暂停或不起作用)?

    我需要使用 XPath 选择页面上的所有链接 然后我的 Puppeteer 应用程序才能单击并执行一些操作 我发现该方法 下面的代码 有时会卡住 我的爬虫会暂停 是否有更好 不同的方式从 XPath 获取所有链接 或者我的代码中是否存在不正