在带有puppeteer

时间:2018-09-20 03:22:30

标签: javascript puppeteer

我有一个通过<script>包含的库,它将自身添加到window对象中,然后立即在下一个<script>中被引用,即:

<script src="lib.js"></script>
<script>
    var foo = new LIB.SomeClass();
    LIB.doStuff();
    ....
</script>

出于分析目的,我现在需要将代理附加到此库/全局LIB对象 的多个属性之前,然后触发下一个脚本(因此,在脚本中的LIB.SomeClass()之前)以上)。
所有这些都必须以编程方式发生-我不能依靠硬编码的行号,也不能修改lib.js以在一切都初始化后立即触发虚拟事件。

我目前的做法是:

  1. 等待Debugger.scriptParsed的{​​{1}}事件
  2. 查找lib.js文件有多少行(lib.js
  3. event.endLinelib.js
  4. 的最后一行放置一个断点
  5. 重新加载页面,等待Debugger.setBreakpointByUrl({lineNumber: ...})触发
  6. Debugger.paused处理程序中安装代理

但是,这似乎不必要地令人费解,尤其是重新加载感觉就像是一个糟糕的hack。

问题:
有没有办法在Debugger.paused之后注入我的工具代码,但是仍然可以保证在加载下一个脚本之前?
我曾尝试在Debugger.scriptParsed处理程序中调用Debugger.pause,但这太不可靠了,只会导致频繁的比赛情况。

谢谢。

1 个答案:

答案 0 :(得分:0)

我希望这可以帮助您将.js文件注入页面。

await page.evaluateOnNewDocument(
  //just put the location of your .js file
  fs.readFileSync(`${__dirname}/scripts/preload.js`, 'utf8'),
);