- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个 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("T071835642571","112255603963");">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();
})()
但是值得一提的是,您可能需要进行一些额外的替换以删除结尾的破折号等。
输出
关于javascript - Puppeteer 从 page.$$ 选择器迭代 elementHandles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49783655/
我有以下代码获取“总线”层的元素句柄(在 32 个不同层的列表中) const [layerFound] = await page.$x("//div[@class='layer']/label[.=
使用 PuppeteerSharp,我试图获取元素的文本。 ElementHandle elementHandle = await page.XPathAsync("//html/body/div[1
在其他浏览器自动化框架中,往往有一个“查找”方法,允许用户找到与选择器匹配的给定元素的所有后代,例如: https://www.w3schools.com/jquery/jquery_traversi
我正在使用 playwright 版本 0.13.0, 我有一个 ElementHandle 的实例,但是 getAttribute 函数不可用,调用它会抛出一个错误说 getAttribute 不是
我在 Node.js 模块中使用 Puppeteer。我使用 XPath 选择器检索 HTML 元素,并且需要提取 text 属性。 目前我使用: // Get the element
请帮助我达到预期的结果。我将用文本填充页面上的每个输入字段:“123”。 let inputList = await page.$$('.form input'); inputList.map(asy
我正在使用 Puppeteer 版本 1.6.0 解析 html 表 // inside the rowMarket variable I store all the rows of a table
我有一个链接列表,想要 click根据链接的名称在其中之一上。我无法使用选择器完成此操作。 使用类似 page.$eval 的东西会很好获取该项目的 ElementHandle 以便我可以点击/单击它
我正在尝试迭代 ElementHandles 数组并将它们附加到第二个页面中,如下所示: const htmlContent: string = ` Section 1
关于 page.$(selector) 的文档说它返回一个包含 ElementHandle 的 promise 。 但是 ElementHandle 上的文档有点欠缺。 它说它“代表一个 DOM 元素
我正在尝试使用 Puppeteer 获取 ElementHandle 的类名......这可能吗?我使用了错误的方法吗?在这个 jsBin 是我代码的一部分,所以你可以理解我想要实现的目标。 Crit
我有一个 ElementHandle,而不是它的选择器,如何将它的 Parent 和 Siblings 作为 ElementHandle。 我知道给定元素的选择器,可以使用 const item =
我在做 const last = await page.$('.item:last-child') 现在我很想根据 last 获取前面的元素。即 const prev = last.$.prev()
我正在构建一个 scraper,但是我一直停留在遍历 elementHandles。 我需要获取我成功完成的行元素列表。在那之后,我需要为每一行捕获 tds text/innerHTML(不确定哪个是
我一直在阅读 Puppeteer API 文档,他们有 jsHandle 和 elementHandle(他们说这是 jsHandle 的扩展)。 好像page.evaluateHandle page
我目前正在与 Puppeteer 合作.我注意到在 Chrome 开发工具中,我可以从任何元素(复制/复制选择器)中获取选择器,我想知道是否也可以从 Puppeteer 中的 ElementHandl
在 Pupeteer 中,我想传递任意数量的 ElementHandle到数组中评估的方法: const element1=await page.$(".element") const element
使用节点 puppeteer 模块,如何继续使用此代码在此处获取 innerContent? const els = Promise.all(await page.$$(selector)).then
我可以很好地传递 native 对象(字符串、列表、数字等),但每当我尝试传递 JSHandle 或 ElementHandle 时,我都会收到此错误消息:“TypeError:将循环结构转换为 JS
Puppeteer 1.0.0-发布。 getProperty() 方法似乎有些神奇。例如,如果您的页面包含: link 然后返回的不是相对而是绝对 URL: const propertyHandle
我是一名优秀的程序员,十分优秀!