CasperJS:在代码中配置代理选项

Jul*_*nec 7 javascript bots phantomjs casperjs

我想知道如何在我们的代码中设置cli参数,而不是将它们放在我们命令的末尾,如下所示:

casperjs casper_tor.js --proxy=127.0.0.1:9050 --proxy-type=socks5
Run Code Online (Sandbox Code Playgroud)

我已经测试了类似的东西,但它不起作用:

var casper=require('casper').create();

casper.cli.options["proxy"] = "127.0.0.1:9050";
casper.cli.options["proxy-type"] = "socks5";
...
casper.run();
Run Code Online (Sandbox Code Playgroud)

我正在努力实现是设置我的代码中的新代理和报废从whatsmyip.com我的新的IP地址来检查一切是正确的(我写的机器人,将经常改变他们的代理人).

Tob*_*bia 5

这不是对您的问题的严格答案,而是对更一般的问题:

如何编写将由CasperJS使用特定CLI选项运行的单个脚本?

使用单个脚本文件没有干净的解决方案,因为"shebang"行#!/bin/...非常有限.实际上,在大多数操作系统上,它只支持解释器名称后的单个参数.

"正确"的解决方案当然是使用多个脚本,通常是一个bash脚本,它将使用适当的选项执行CasperJS脚本.

但...

有一个非常古老的   技巧   可怕的黑客解决了这个问题,多语言脚本.它涉及滥用语言功能来编写一个文件,该文件是两个(或更多)解释器中的有效脚本,执行两个不同的操作.

在这种情况下,由于shebang行,脚本将首先由Bash读取.该脚本将指示Bash使用脚本本身的特定选项执行CasperJS ,然后终止.CasperJS将跳过针对Bash的线路并运行脚本的其余部分.

JavaScript版本

#!/bin/sh
//bin/true; exec casperjs --proxy=127.0.0.1:8003 test "$0" "$@"

(rest of JavaScript file)
Run Code Online (Sandbox Code Playgroud)

这里的诀窍是//在Javascript 中启动注释,而在Bash中它只是第一行代码的一部分.

CoffeeScript版本

#!/bin/sh
""""exec casperjs --proxy=127.0.0.1:8003 test "$0" "$@" #"""

(rest of CoffeeScript file)
Run Code Online (Sandbox Code Playgroud)

这里的技巧是""""由Bash跳过,因为它只是两个空字符串,而在CoffeeScript中它打开了一个吞噬第一行代码的多行字符串.


Jul*_*nec 2

我需要 CasperJS 在节点环境中运行。所以我已经设置了 Spooky,好消息是你可以在代码中设置一个,如下所示:

var spooky = new Spooky({
        child: {
            proxy: '192.128.101.42:9001',
            /* ... */
        },
        /* ... */
    },
Run Code Online (Sandbox Code Playgroud)