我想知道如何在我们的代码中设置cli参数,而不是将它们放在我们命令的末尾,如下所示:
casperjs casper_tor.js --proxy=127.0.0.1:9050 --proxy-type=socks5
我已经测试了类似的东西,但它不起作用:
var casper=require('casper').create(); casper.cli.options["proxy"] = "127.0.0.1:9050"; casper.cli.options["proxy-type"] = "socks5"; ... casper.run();
我正在努力实现是设置我的代码中的新代理和报废从whatsmyip.com我的新的IP地址来检查一切是正确的(我写的机器人,将经常改变他们的代理人).
这不是对您的问题的严格答案,而是对更一般的问题:
如何编写将由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)
这里的诀窍是//
在Javascript 中启动注释,而在Bash中它只是第一行代码的一部分.
CoffeeScript版本
#!/bin/sh
""""exec casperjs --proxy=127.0.0.1:8003 test "$0" "$@" #"""
(rest of CoffeeScript file)
这里的技巧是""""
由Bash跳过,因为它只是两个空字符串,而在CoffeeScript中它打开了一个吞噬第一行代码的多行字符串.