【发布时间】:2021-08-27 02:36:06
【问题描述】:
我正在尝试获取类名为 calendarCellRegularPast 的所有 td 元素我已尝试多次尝试使用 page.$、page.$$、page.eval 和许多其他元素,但似乎无法获得适当的元素。我得到了对象,但无法解析它。我知道有办法做到这一点,但老实说,我是 puppeteer 和 Javascript 的新手,只是想不通。
这是一个预定工作日的日历,我正在尝试进一步了解并获取日期和时间。我想在 for 循环中使用它,这样我就可以抓住所有的工作时间。
我不需要修复我的代码,因为我知道它很乱,但我只需要知道如何获取这些元素
到目前为止,这是我的一些代码,虽然我尝试了很多东西,但它很混乱
const el = await page.$("#scrollContainer > table > tbody > tr:nth-child(2) > td:nth-child(1)")
const className = await el.getProperty('className')
const getElm = async() => {
try {
const elm = await page.evaluate(()=> {
let persons = [];
const weekElm = document.querySelectorAll("#scrollContainer > table > tbody");
document.querySelector("#scrollContainer > table > tbody > tr:nth-child(2) > td:nth-child(3)")
console.log('\n\n\n', weekElm.length, '\n\n\n');
try {
console.log(weekElm);
} catch (e) {
console.error('could not log "weeksElm"');
}
for (let i = 2; i < weekElm.length; i++) {
try {
const trd = weekElm[i];
console.log(trd);
const tr = document.querySelectorAll(`tr:nth-child${i+1}`)
persons.push(tr);
try {
console.log('\n\n\n', tr, '\n\n\n');
} catch (e) {
console.error('could not log "\\n\\n\\n, tr, \\n\\n\\n"');
}
for ( let j = 0; j < tr.length; i++) {
const td = (tr.querySelectorAll(`td:nth-child${j}`))
try {
pass
} catch (e) {
console.error('could not log "weeksElm"');
}
}
} catch (e) {}
}
})
console.log(persons);
} catch (e){
console.error("unable to get the work schedule \n unfortunately i still work");
}
}
}
【问题讨论】:
-
page.$$ 选择与选择器匹配的所有元素,因此您不需要使用 for 循环。从您的选择器的外观来看,我可以看到您对选择器没有很多经验。这是一个有用的网站:devhints.io/css。其余的孩子我看不到,给你推荐一个好的选择器。但应该看起来像这样:“tbody .calendarCellRegularPast”。该页面的链接会很有帮助。
-
@Invizi 大多数孩子都在一张照片中可见,我会链接该网站,但它需要登录,因为它是一个工作调度网站,所以它真的不可能,但我会看看那个网站,非常感谢!
-
@FiveFlyPaper 如果您的主要问题只是获取类的跨度,您可以尝试 page.$$("tbody span.calendarCellRegularPast") 。顺便说一句,具有日期和时间的元素是什么样的?
-
一般来说,images of code 不是很有帮助——至少,为了能够执行代码和使用它而重新输入它是不切实际的,几乎总是需要编写一个体面的、准确的回答。您可以将 HTML 显示为字符串,可能使用相关的 JS 来重新创建实时页面行为并使用
page.setContent(html)导航到它,或提供指向页面的实时链接。此外,除了元素之外,您最终想要获取哪些数据?感谢您的信息。 -
另一个表中的一个表。看起来很有趣。试试“.etmCursor tr td”。然后您可以使用 .map 遍历它们,然后为您想要的每个单独项目使用更多选择器。如“.calendarDateNormal”和“.CalendarCellRegularPast:nth-child(1)”和“.CalendarCellRegularPast:nth-child(2)”。
标签: javascript html web-scraping puppeteer