Puppeteer:按顺序操纵页面的DIV / html元素?

问题描述 投票:0回答:1

学习如何使用Puppeteer抓取网站,我发现,作为javascript新手,使用某些动态生成的网站的最简单方法是创建一个循环来循环一些Div的一个接一个,并触发基于他们的动作特定属性(例如,使用`class = Clickable单击所有Div的循环)

大多数在线Puppeteer示例都会介绍如何通过某些名称/类来选择页面元素,例如here,而不是如何创建这样的循环,该循环遍历Div的子部分,并基于它们执行操作。

由于我是Javascript的新手,如果有人会给我建议或指示如何做到这一点,我将非常感激。

示例:我想从某些Div的最底层获取数据,在这种情况下使用section=字母C的某些变体,所以我按照以下方式打开以下切片的Div,计划在以下提取一些数据结束,

<div class="Table" section="A">
<div class="Columns" id style="display: none;">
<div class="Table" section="B">
<div class="Columns" id style="display: none;">

## section "C" has been clicked by Puppeteer, 
## and so indented part is what is expanded from class=Columns
<div class="Table" section="C">
<div class="Columns" id style>

    ## Next sub-section that needs to be gone through
    <div class="Column" section="a">
    <div class="Rows" id style="display: none;">
    <div class="Column" section="b">
    <div class="Rows" id style="display: none;">

    ## Repeating same process one layer deeper now
    <div class="Column" section="c">
    <div class="Rows" id style>

        <div class="Subsection" section="i">
        <div class="data" id style>
        ............
        ............
        *loop keeps going*

我希望我的用例现在更清楚了。

javascript html jquery-selectors puppeteer
1个回答
2
投票

我理解正确吗?你有一些隐藏的divs嵌套层;要显示下一层,你需要点击一些可见元素;然后一个隐藏的元素变得可见,你需要点击它继续等等?

如果是这样,可能有两种情况。

  1. 如果扩展总是同步的。然后所有遍历都可以在浏览器上下文中完成:
await page.evaluate(() => {
  const sections = ['C', 'c', 'i'];

  for (let section of sections) {
    const element = document.querySelector(`[section=${section}]`);
    element.click();
  }
});
  1. 如果扩展可能是异步的(例如,取决于XHR / fetch调用)。然后我们需要在Node.js上下文中进行异步检查:
const sections = ['C', 'c', 'i'];
for (let section of sections) {
  const element = await page.waitForSelector(`[section=${section}]`, { visible: true });
  await element.click();
}
© www.soinside.com 2019 - 2024. All rights reserved.