gpt4 book ai didi

javascript - NodeJS 模拟浏览器获取/发布请求

转载 作者:搜寻专家 更新时间:2023-10-31 23:19:58 26 4
gpt4 key购买 nike

当我四处搜索模拟浏览器时,有很多混合的结果。长话短说,我需要我的 Node 服务器来获取和发布请求。通常我只是用 http 包来做这件事。然而,在另一边有一些反脚本的东西。即让服务器知道它是一个真正的浏览器的 javascripts。所以,我需要执行这些。

我实际上在 5 年前就解决了这个问题,但当时我的网站只使用 PHP。该解决方案涉及使用 Qt webkit 小部件和伪造的 X-server。不优雅,但很容易做到。当时我在 Perl、PHP 或 Python 中发现的唯一可用的 javascript 引擎非常慢。

由于 NodeJS 是基于 V8 构建的,我认为有一种简单的方法可以做到这一点。作为记录,我希望得到以下内容。

// Omitting some callbacks
http.get('http://remote.site', function(res) {
res.on('end', function() {
// previously accumulated data is the page returned by
// the request. Any thing found in a <script> tag would have
// been executed.
});
});

最佳答案

As NodeJS is built on V8, I gotta think there's an easy way to do this.

实际上,不!在浏览器上下文中运行不仅仅是能够执行 JavaScript。 Node.js 中不存在所有 DOM 内容和不存在的内容。 Node.js 只有 JavaScript 引擎。

如果没有浏览器引擎,您将不知道要加载什么脚本,以什么顺序加载,或者无法提供随 documentwindow 一起提供的所有内容,这可能是您要尝试做的事情的必要部分。

The solution involved using a Qt webkit widget, and a fake X-server. Not elegant, but it was pretty easy to do.

这实际上是正确的解决方案……主要是。幸运的是,如今已有工具对此进行了相当好的优化。

看看 PhantomJS。 http://phantomjs.org/您可以像编写 Node.js 一样为其编写脚本。 (它支持 require() 等等,以及您希望工作的大多数 NPM 包。)PhantomJS 将允许您运行页面并轻松拉出 DOM 内容。

如果 PhantomJS 的内置 JavaScript 环境不包含您需要的某些 Node.js 组件(例如文件系统或网络访问),您始终可以从 Node.js 应用程序控制 PhantomJS。 https://github.com/amir20/phantomjs-node

关于javascript - NodeJS 模拟浏览器获取/发布请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44099600/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com