Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将python对象传递到casperjs脚本中,在该对象上迭代并将结果对象返回给python_Python_Function_Loops_Call_Casperjs - Fatal编程技术网

将python对象传递到casperjs脚本中,在该对象上迭代并将结果对象返回给python

将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函数将对象传递给

我不熟悉用更适合网络的语言编程,但我用vba for excel编程

我想做的是:

  • 将列表(在python中)传递给casper.js脚本
  • 在casperjs脚本中,我想迭代python对象(搜索词列表)
  • 在casper脚本中,我想在google中查询搜索词
  • 查询后,我希望将这些查询的结果存储在一个数组中,在迭代python对象时将数组连接在一起
  • 然后,一旦我搜索了所有搜索词并找到了结果,我想将结果数组返回给python,以便进一步操作数据
  • 问题-->我不知道如何编写python函数将对象传递给casper。

    问题-->我也不知道如何编写casper函数将javascript对象传递回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解析结果文件并执行其他操作来继续执行。有没有帮助?有什么问题吗?