将我的头靠在墙上,希望有人能提供一些建议。
我试图在加载到Puppeteer的页面中调用onChange处理程序。虽然我可以在选择中选择适当的选项(通过关闭无头模式进行验证),但我无法让事件处理程序运行。
1)Puppeteer提供了page.select()方法,该方法明确指出了
“一旦提供的所有选项均已触发,便触发更改和输入事件 被选中”
我能够选择预期的选项,但事件处理程序不会触发
await page.select('select#venue', '40');
2)在page.evaluate()调用中使用本机javascript手动选择所需的选项,然后生成一个新的Event,然后使用element.dispatchEvent(event)手动生成
document.querySelector('select#venue > option:nth-child(4)').selected = "selected";
const event = new Event('change', {bubbles: true});
event.simulated = true;
document.querySelector('select#venue').dispatchEvent(event));
3)在page.evaluate()调用中使用jQuery手动选择所需的otpion,然后触发事件,例如
$("select#venue").val(17).change();
完全没有想法的人,而想法得到赞赏!
答案 0 :(得分:1)
我正在搜索同一内容,以触发文本字段上的“ onchange”事件。我对您的代码进行了一些修改,然后成功了:
const myValue = 17;
await page.$eval('#selector', (element, myValue) => {
element.value = myValue;
const event = new Event('change');
element.dispatchEvent(event);
}, myValue);