学习如何使用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*
我希望我的用例现在更清楚了。
我理解正确吗?你有一些隐藏的div
s嵌套层;要显示下一层,你需要点击一些可见元素;然后一个隐藏的元素变得可见,你需要点击它继续等等?
如果是这样,可能有两种情况。
await page.evaluate(() => {
const sections = ['C', 'c', 'i'];
for (let section of sections) {
const element = document.querySelector(`[section=${section}]`);
element.click();
}
});
const sections = ['C', 'c', 'i'];
for (let section of sections) {
const element = await page.waitForSelector(`[section=${section}]`, { visible: true });
await element.click();
}