<
python动态爬虫
>

没有上一篇咯
下一篇

某CMS最新版审计漏洞披露

动态爬虫

初步构想


页面加载完成后,通过 Ajax 加载数据,需要 用户交互(点击、滚动等)加载数据,这些情况下就需要动态爬虫 模拟用户交互:用户交互的本质,实际上就是触发了绑定在 DOM 节点的事件,所以模拟用户操作就是触发节点事件

是否添加了新的节点(、<iframe> 等) 是否发起了新的请求(Ajax 请求、跳转 等) 爬虫实现

JavaScript 中绑定事件,都会调用 addEventListener 函数,在页面代码执行前 HOOK addEventListener 函数就可以捕获到哪些 DOM 节点绑定了事件 除了 addEventListener 绑定事件,还有一些 inline-script 是无法通过 HOOK addEventListener 来获取,如

在现实场景中,我们往往会遇到很多事件需要和用户交互后才触发,例如滚动页面加载下一页,点击某个按钮后显示一段内容等。因此就需要去模拟正常用户的操作,而正常用户操作的本质就是对页面中所有事件的触发。

JavaScript 中提供 dispatchEvent 函数,可以触发指定 DOM 节点的指定事件 onXXXX 属性可以通过遍历节点来触发 获取触发事件的结果 监听 DOMNodeInserted 事件来检查页面中的 DOM 是否发生变化

onResourceRequested 可以捕获非主流框架的请求,但需要通过正则匹配筛选出有效请求 XMLHttpRequest.open 和 XMLHttpRequest.send 可以准确的捕获请求内容

页面加载完后,获取所有的 、<iframe>、<form> 标签,开启页面 DOM 节点监听,并触发所有的事件,最后输出结果

[参考资料:]

pyppeteer使用总结:

puppeteer

动态加载与爬虫代理

WEB2.0启发式爬虫

Top
Foot