木偶调用onChange事件处理程序不起作用

Sha*_*ley 6 javascript jquery onchange puppeteer

将我的头撞到这堵墙上,希望有人能给我一些建议。

我试图在加载到Puppeteer的页面中调用onChange处理程序。虽然我可以在select中选择适当的选项(通过关闭无头程序进行验证),但我无法使事件处理程序运行。

1)Puppeteer提供了page.select()方法,该方法明确声明

“选择所有提供的选项后,触发更改和输入事件”

我可以选择预期的选项,但事件处理程序不会触发

await page.select('select#venue', '40');
Run Code Online (Sandbox Code Playgroud)

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));
Run Code Online (Sandbox Code Playgroud)

3)在page.evaluate()调用中使用jQuery手动选择所需的otpion,然后触发事件,例如

$("select#venue").val(17).change();
Run Code Online (Sandbox Code Playgroud)

乡亲们完全摆脱了主意,而思想受到赞赏!

小智 8

我正在寻找同样的东西,在文本字段上触发“onchange”事件。我稍微修改了你的代码并且它起作用了:

const myValue = 17;
await page.$eval('#selector', (element, myValue) => {
    element.value = myValue;
    const event = new Event('change');
    element.dispatchEvent(event);
}, myValue);
Run Code Online (Sandbox Code Playgroud)