iMacro - 设置变量+另存为CSV

时间:2013-02-03 20:59:36

标签: web-scraping imacros

我正在寻找iMacro脚本2部分的帮助......

Part1 - Variable

我点击页面的下一行以访问我需要提取的页面。

1st Link

TAG POS=**8** TYPE=A FORM=NAME:xxyy ATTR=HREF:https://aaa.aaaa.com/en/administration/xxxx.jsp?reqID=h*

第二链接

TAG POS=**9** TYPE=A FORM=NAME:xxyy ATTR=HREF:https://aaa.aaaa.com/en/administration/xxxx.jsp?reqID=h*

标签pos是变量,我怎样才能得到这个,这样当循环运行时,宏将选择屏幕上的下一个值(即选择8,9,10)?有些屏幕有100多个链接可供点击。

第2部分 - 保存CSV文件

我的文件中有saveas行。但是我如何才能创建它,以便只创建一个csv文件(即使宏运行了50次)?另外,有没有办法从iMacros格式化CSV文件,以便每个新的运行从另一行开始(目前,所有数据都提取到多行的第1行。)

提前谢谢你,

亚当

1 个答案:

答案 0 :(得分:3)

这会做你所要求的。它将循环宏并每次在宏中设置新的位置编号。

1)

    var macro;

    macro ="CODE:";
    macro +="TAG POS={{number}} TYPE=A FORM=NAME:xxyy ATTR=HREF:https://aaa.aaaa.com/en/administration/xxxx.jsp?reqID=h*"+"\n";


for(var i=1;i<100;i++)
{

iimSet("number",i)
iimPlay(macro)

}

对于第二部分的解决方案,您将需要JavaScript脚本。第一部分是声明宏,第二部分是启动宏,第三部分是将提取的文本保存到文件中的功能。每次运行它都会保存在新行中。

2)

var macroExtractSomething;

macroExtractSomething ="CODE:";
macroExtractSomething +="TAG POS=1 TYPE=DIV ATTR=CLASS:some_class_of_some_div EXTRACT=TXT"+"\n";



iimPlay(macroExtractSomething)
var extracted_text=iimGetLastExtract();

WriteFile("C:\\some_folder\\some_file.csv",extracted)




  //This function writes string into a file. It will also create file on that location
    function WriteFile(path,string)
    {

    //import FileUtils.jsm
    Components.utils.import("resource://gre/modules/FileUtils.jsm");
    //declare file
    var file = new FileUtils.File(path);

    //declare file path
    file.initWithPath(path);

    //if it exists move on if not create it
    if (!file.exists())
    {
    file.create(file.NORMAL_FILE_TYPE, 0666);
    }

    var charset = 'EUC-JP';
    var fileStream = Components.classes['@mozilla.org/network/file-output-stream;1']
    .createInstance(Components.interfaces.nsIFileOutputStream);
    fileStream.init(file, 18, 0x200, false);
    var converterStream = Components
    .classes['@mozilla.org/intl/converter-output-stream;1']
    .createInstance(Components.interfaces.nsIConverterOutputStream);
    converterStream.init(fileStream, charset, string.length,
    Components.interfaces.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER);

    //write file to location
    converterStream.writeString("\r\n"+string);
    converterStream.close();
    fileStream.close();


    }