将python对象传递到casperjs脚本中,在该对象上迭代并将结果对象返回给python
我不熟悉用更适合网络的语言编程,但我用vba for excel编程 我想做的是:将python对象传递到casperjs脚本中,在该对象上迭代并将结果对象返回给python,python,function,loops,call,casperjs,Python,Function,Loops,Call,Casperjs,我不熟悉用更适合网络的语言编程,但我用vba for excel编程 我想做的是: 将列表(在python中)传递给casper.js脚本 在casperjs脚本中,我想迭代python对象(搜索词列表) 在casper脚本中,我想在google中查询搜索词 查询后,我希望将这些查询的结果存储在一个数组中,在迭代python对象时将数组连接在一起 然后,一旦我搜索了所有搜索词并找到了结果,我想将结果数组返回给python,以便进一步操作数据 问题-->我不知道如何编写python函数将对象传递给
import os
import subprocess
scriptType = 'casperScript.js'
APP_ROOT = os.path.dirname(os.path.realpath(__file__))
PHANTOM = '\casperjs\bin\casperjs'
SCRIPT = os.path.join(APP_ROOT, test.js)
params = [PHANTOM, SCRIPT]
subprocess.check_output(params)
js代码
var casper = require('casper').create();
casper.start('http://google.com/', function() {
this.echo(this.getTitle());
});
casper.run();
您是否可以使用JSON将数据发送到脚本,然后在返回时对其进行解码 Python:
json=json.dumps(stuff)
//将对象转换为字符串以传递给js
将json文件加载到python中:
with open(location + '/module_status.json') as data_file:
data = json.load(data_file);
Javascript:
arr=JSON.parse(JSON)
//将JSON字符串转换为js数组
json=json.stringify(arr)
//将数组转换为json字符串,以便发送到python您可以使用两个临时文件,一个用于输入,另一个用于输出casperjs脚本。可以,但缺少一点细节。与解析来自casperjs的控制台消息相比,显式地将JSON转储到文件中更好,因为它们可以与调试字符串等交织在一起
在python中:
import tempfile
import json
import os
import subprocess
APP_ROOT = os.path.dirname(os.path.realpath(__file__))
PHANTOM = '\casperjs\bin\casperjs'
SCRIPT = os.path.join(APP_ROOT, test.js)
input = tempfile.NamedTemporaryFile(mode="w", delete=False)
output = tempfile.NamedTemporaryFile(mode="r", delete=False)
yourObj = {"someKey": "someData"}
yourJSON = json.dumps(yourObj)
input.file.write(yourJSON)
# you need to close the temporary input and output file because casperjs does operations on them
input.file.close()
input = None
output.file.close()
print "yourJSON", yourJSON
# pass only file names
params = [PHANTOM, SCRIPT, input.name, output.name]
subprocess.check_output(params)
# you need to open the temporary output file again
output = open(output.name, "r")
yourReturnedJSON = json.load(output)
print "returned", yourReturnedJSON
output.close()
output = None
最后,当对象被垃圾收集时,临时文件将被自动删除
在casperjs中:
var casper=require('casper').create();
var fs=要求(“fs”);
var input=casper.cli.raw.get(0);
var output=casper.cli.raw.get(1);
input=JSON.parse(fs.read(input));
input.casper=“完成”//添加另一个属性
input=JSON.stringify(输入);
fs.write(输出,输入,“w”);//输入写入输出
casper.exit();
casperjs脚本没有做任何有用的事情。它只是用添加的属性将inputfile写入输出文件。STUFF是我拥有的带有搜索词的列表对象吗?将内容传递给json对象json,然后创建Javascript数组对象后,如何将数组对象传递到casperJS脚本中?在ecvel vba中,它将是sub CasperScript(SomeParameter),然后对于SomeParameter.length中的i…(这里是do javascript stuff)stuff是您的列表/对象是。你能用args命令调用你的casperjs脚本吗?现在我只需进入powershell并键入casperjs python script name.py,我不知道在传入参数时如何调用python脚本,也不知道如何将搜索字符串或列表之类的参数传递给casperjs脚本。我是新来的。很抱歉,您可以使用python从文件加载json(我在回答中添加了这个)。您可以将它作为一个参数传递给js脚本,并使用CLI@yoshiserry捕捉它。基本上,您可以将python中的列表/对象序列化为JSON,并将JSON写入文件。然后从python中调用casperjs脚本,该脚本读取该文件(可以硬编码并使用
fs
module),解析JSON,执行某些操作,将结果字符串化,将结果写入已知文件。python脚本通过读取结果文件、从JSON解析结果文件并执行其他操作来继续执行。有没有帮助?有什么问题吗?