简而言之
我想通过 Tor 网络加载 html 内容并执行 JavaScript 以通过 AJAX 通过该网络加载其他内容。这必须通过在 Linux 服务器上运行的脚本自动完成,无需任何人工交互。我找不到可以通过 Tor 网络自动执行 JavaScript 的工具组合。
详细
我想编写一个具有以下特征的应用程序:
环境
- 自主运行(无需任何人为交互)
- 在非 GUI(“无头”)Linux 服务器上运行 (Ubuntu 12.04)
特征
- 使用 Tor 网络匿名加载网页内容(html 文档、图像……)
- 执行嵌入或附加到 html 文档的 JavaScript(通过 AJAX 或类似技术加载附加内容)
- 当所有内容加载完成后:将 html 文档转换为 DOM 树并从该树中提取特定项目。
环境限制禁止使用网络浏览器。一切都必须通过程序或脚本来完成。功能约束强制执行不直接连接到互联网的 JavaScript,而是通过 Tor 网络。
Tor
要使用 Tor 网络,我可以运行一个在我的机器上提供套接字的 Tor 客户端。然后我编写一个连接到该套接字的 Perl 脚本。 Perl 脚本通过此套接字将 http 和 https 请求发送到 Tor 客户端,然后客户端通过 Tor 网络路由它们。所有响应都以相同的方式返回。
我已经测试过这个,效果很好。但在 Perl 脚本中,执行接收到的 html 文档附带的 JavaScript 确实很困难。我必须用 Perl 编写一个 JavaScript 模拟器才能实现这一点,但这远远超出了我的可用时间和我的技能。
JavaScript
要执行嵌入或附加的 JavaScript,我可以使用 phantomJS 或 slimerJS 等工具(phantomJS 在 Ubuntu 12.04 上无法正常工作,因此我使用 slimerJS,它提供几乎相同的功能)。有了这个工具,我可以加载 html 文档并自动执行它附带的所有 JavaScript,因此我还收到不属于最初 html 文档但稍后通过 Ajax 或类似技术加载的所有内容。此外,我可以轻松分析文档的 DOM 树以提取我感兴趣的项目。
我也测试过这个,它也工作得很好,但是我知道的工具(phantomJS 和 slimerJS)使用它们自己的程序来连接到互联网。似乎没有办法告诉他们连接到套接字并使用它通过它与互联网进行通信。
我的问题
有没有办法通过 Tor 网络自动执行 Ajax 调用?
对我来说似乎存在两种可能的方式:
- 获取在 Perl 脚本中执行的 JavaScript 代码。这可以通过模块来完成,但我找不到任何模拟 JavaScript 解释器的 cpan 模块。解释器应该调用我必须编写的 Perl 函数,而不是直接连接到互联网。
- 强制 slimerJS(或 phantomJS 或任何其他工具)连接到本地主机上的套接字并通过此套接字发送所有请求。也许可以在一个假装提供直接访问互联网但实际上将所有通信重定向到 Tor 客户端套接字的环境中启动 slimerJS?
如果您正在运行 Tor 客户端,则可以使用其侦听的地址进行代理设置。检查文档以了解您需要传递的代理选项:
-
slimerJS http://docs.slimerjs.org/nightly/configuration.html
- 幻影JS http://phantomjs.org/api/command-line.html
代理类型将为 SOCKS。请记住,您需要将地址套接字绑定到本地。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)