javascript - 如何在两个独立标签之间获取 HTML 元素

标签 javascript node.js web-scraping puppeteer

我正在使用 puppeteer 操纵者。我有一种情况需要在两个不存在父子关系的标签之间获取内容。

<h1>neverchangeA<h1>
<span>abc<span>
<span>abc2<span>
<h1>neverchangeB<h1>

预期元素

<span>abc<span>
<span>abc2<span>

简单来说,我需要类似这样的正则表达式:

regex.matchBetween(<h1>neverchangeA<h1>,<h1>neverchangeB<h1>)

最佳答案

你可以用 JS 和评估方法来做到这一点。

https://github.com/puppeteer/puppeteer/blob/master/docs/api.md#pageevaluatepagefunction-args

此示例将所需元素的 HTML 作为字符串返回。

const result = await page.evaluate(() => {
  const h1s = [...document.querySelectorAll('h1')]
  const neverChangeA = h1s.find(elem => elem.innerText === "neverchangeA")
  if(neverChangeA){
    const siblings = [...neverChangeA.parentNode.children]
    const indexOfFirstH1 = siblings.findIndex(elem => elem.innerText === "neverchangeA")
    const indexOfSecondH1 =  siblings.findIndex(elem => elem.innerText === "neverchangeB")
    const betweenELems = siblings.slice(indexOfFirstH1 + 1, indexOfSecondH1)
    const htmlOfElems = betweenELems.map(elem => elem.outerHTML)
    const result = htmlOfElems.join('')
    return Promise.resolve(result)
  }
  else {
    return Promise.resolve(null)
 }
})
console.log(result)

关于javascript - 如何在两个独立标签之间获取 HTML 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61682548/

相关文章:

javascript - 从 window.history 中查找上一个 URL

javascript - 错误: Connection lost: The server closed the connection. mysql Node

javascript - Loopback/SQL中如何查询相关模型的个数?

python - ulr 不唯一的 pandas.read_html 的替代方案?

javascript - 如何使用 Angular 迭代 Elasticsearch 结果?

javascript - 重变量应该放在函数之外吗?

python - 类型错误 : not all arguments converted during string formatting

python - 如何使用 Urllib2 更有效地抓取?

javascript - 如何延迟加载 Norton Secure Site Seal?

javascript - 检查 $routeProvider 模板中是否存在 ng-include 文件