gpt4 book ai didi

javascript - Puppeteer 从 page.$$ 选择器迭代 elementHandles

转载 作者:行者123 更新时间:2023-11-29 18:55:04 25 4
gpt4 key购买 nike

我正在构建一个 scraper,但是我一直停留在遍历 elementHandles。

我需要获取我成功完成的行元素列表。在那之后,我需要为每一行捕获 tds text/innerHTML(不确定哪个是哪个)。现在最好只在标准输出中打印出来。

我得到的错误是 UnhandledPromiseRejectionWarning: TypeError: tds.forEach is not a function,根据我的谷歌搜索,它告诉我 tds 不是数组。

我能够在 python 和 selenium 中实现这一点,但由于我是 javascript 新手,我预计我会做一些非常错误的事情。

根据我的理解,element.$$('td') 返回一个 Promise,但是如果我放置 await,我会得到 SyntaxError: await is only valid in async function

  const selectors = await page.$$('#transactionItems > tbody > tr');
console.log(selectors.length); // outputs 31 which is the right number
selectors.forEach( (element) => {
let tds = element.$$('td');
console.log(tds);
tds.forEach( (element) => {
console.log(element.innerText)
});
});

编辑:

我已尝试使用以下代码成功打印它,但这仍然不是我想要的。

const selectors = await page.$$('#transactionItems > tbody > tr ');
console.log(selectors.length);
for(let tr of selectors){
const trText = await page.evaluate(el => el.innerHTML, tr);
console.log(trText)
}

输出如下:

<td> T737410C - <a class="pointer" target="_blank" onclick="openAPRImageWindow(&quot;T071835642571&quot;,&quot;112255603963&quot;);">Image</a></td>
<td>02/05/2018 06:48:06</td>
<td>DRPA</td>
<td> 07W - CBB</td>
<td>OPEN</td>
<td>$5.00</td>
<td>$25.00</td>
<td>$0.00</td>
<td>$30.00</td>

理想情况下我需要的输出是['T737410C', '02/05/2018 06:48:06', 'OPEN', '5.00', '25.00']

最佳答案

试试这个脚本:-

const puppeteer = require('puppeteer');

const html = `
<html>
<body>
<table>
<tr><td> T737410C - <a href=".">Image</a></td>
<td>02/05/2018 06:48:06</td><td>DRPA</td>
<td> 07W - CBB</td><td>OPEN</td></tr>
</table>
</body>
</html>`;

(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(`data:text/html,${html}`);

const data = await page.evaluate(() => {
const tds = Array.from(document.querySelectorAll('table tr td'))
return tds.map(td => {
var txt = td.innerHTML;
return txt.replace(/<a [^>]+>[^<]*<\/a>/g, '').trim();
});
});

//You will now have an array of strings
console.log(data);
await browser.close();
})()

但是值得一提的是,您可能需要进行一些额外的替换以删除结尾的破折号等。

输出

enter image description here

关于javascript - Puppeteer 从 page.$$ 选择器迭代 elementHandles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49783655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com