傀儡师。无法在 evaluate() 中获取节点 属性
Puppeteer. Cannot get node property in evaluate()
如何找到一个不起眼的单选按钮元素并在 puppeteer 中单击它?
我看过很多文章说,"just use evaluate() and then click it" 或类似的,但这在我的场景中不起作用。
这是我的:
page.on('console', consoleObj => console.log(consoleObj.text()));
await page.evaluate(() => {
let container = document.getElementById('container');
let options = container.getElementsByClassName('labels');
// OPTIONS GIVES ME AN ARRAY OF JSHandle@node.
if (options.length > 0) {
for (let radio of options) {
let value = radio.value;
console.log(value);
}
}
});
我不知道该怎么办。值始终为空。
我需要知道它的 value
才能知道是否点击它。我打算传入一个变量来求值,然后根据那个变量点击右边的
如果我简单地将 radio.click()
放在 for 循环中,它的工作原理是它单击每个元素并始终在最后一个被选中的元素上结束。所以我知道 click()
有效。如何确定要单击哪个并选择它?
这里有 2 个单选按钮元素 HTML:
<input name="choice" value="accept" class="checkbox" type="radio">
<input name="choice" value="reject" class="checkbox" type="radio">
为什么不使用 getElementsByName?
page.on('console', consoleObj => console.log(consoleObj.text()));
await page.evaluate(() => {
let options = container.getElementsByName('choice');
if (options.length > 0) {
for (let radio of options) {
let value = radio.value;
console.log(value);
}
}
});
如何找到一个不起眼的单选按钮元素并在 puppeteer 中单击它?
我看过很多文章说,"just use evaluate() and then click it" 或类似的,但这在我的场景中不起作用。
这是我的:
page.on('console', consoleObj => console.log(consoleObj.text()));
await page.evaluate(() => {
let container = document.getElementById('container');
let options = container.getElementsByClassName('labels');
// OPTIONS GIVES ME AN ARRAY OF JSHandle@node.
if (options.length > 0) {
for (let radio of options) {
let value = radio.value;
console.log(value);
}
}
});
我不知道该怎么办。值始终为空。
我需要知道它的 value
才能知道是否点击它。我打算传入一个变量来求值,然后根据那个变量点击右边的
如果我简单地将 radio.click()
放在 for 循环中,它的工作原理是它单击每个元素并始终在最后一个被选中的元素上结束。所以我知道 click()
有效。如何确定要单击哪个并选择它?
这里有 2 个单选按钮元素 HTML:
<input name="choice" value="accept" class="checkbox" type="radio">
<input name="choice" value="reject" class="checkbox" type="radio">
为什么不使用 getElementsByName?
page.on('console', consoleObj => console.log(consoleObj.text()));
await page.evaluate(() => {
let options = container.getElementsByName('choice');
if (options.length > 0) {
for (let radio of options) {
let value = radio.value;
console.log(value);
}
}
});