【发布时间】:2018-06-19 15:11:20
【问题描述】:
为什么在 VS Code 中手动点击调试会话时,锚点上的点击事件没有触发?
大致来说,这是我的目标:
- 在 headful Chrome 中使用 Puppeteer 访问linkedin.com
- 登录
- 访问linkedin.com/jobs
- 为页面上的所有链接附加点击事件处理程序
- 附加事件处理程序后暂停 node.js 执行
- 用鼠标手动单击链接以观察这个新事件处理程序的运行情况
在代码中,这就是我得到的
const puppeteer = require('puppeteer')
async function main() {
const browser = await puppeteer.launch({ headless: false })
const page = await browser.newPage();
await page.goto('https://www.linkedin.com/');
await login(page);
await page.goto('https://www.linkedin.com/jobs/');
await attachLinks(page);
await page.screenshot({ path: "bla" })
browser.close();
};
async function attachLinks(page) {
const bodyHandle = await page.$('body');
await page.evaluate( (body, numLinks=3) => {
let anchors = Array.from( body.querySelectorAll("a") ).
filter( (e, i) => i < numLinks );
for(let i = 0; i < anchors.length; i++) {
let a = anchors[i];
console.log(`Binding for ${a.href}`);
// This event does not trigger!!!!!
a.addEventListener("click", e => {
console.log("some one clicked the link");
e.preventDefault();
e.stopPropagation();
return false;
});
};
}, bodyHandle);
await bodyHandle.dispose();
}
main();
然后使用 VS Code 和 node.js 调试支持,在附加了 <a> 标记的 onclick 事件之后,我在 await page.screenshot({ path: "bla" }) 线上放置了一个断点。在打开的浏览器中(因为 headless 设置为 false),当代码等待恢复时,我用鼠标单击了 <body> 中的 <a> 标签,期望看到“有人点击了链接” headful 调试 Chrome 浏览器的控制台。但我在浏览器或 VS Code 的调试控制台中都没有看到日志。我在这里遗漏了什么吗?
【问题讨论】:
-
您希望控制台在哪里呈现?
-
澄清一下,您是否在浏览器的 DevTools 控制台中查看这些日志?还是 VSCode 中的调试控制台?
-
是的,在 headful 浏览器的控制台中,
attachLinks函数向它们添加了 onClick 事件处理程序。我也仔细检查了 VS Code 调试控制台。那里也没有。
标签: javascript puppeteer