腳本

腳本可以在許多地方使用,以定制Visual Web Ripper 行為或擴(kuò)展標(biāo)準(zhǔn)功能。Visual Web Ripper 腳本為.NET功能可用C#,VB.Net, 或正則表達(dá)式。

腳本可以分為三類:

  • 轉(zhuǎn)換腳本Transformation scripts : 用于轉(zhuǎn)換一段文本鸣皂。例如恢准,如果你從一個(gè)網(wǎng)頁(yè)中提取一個(gè)地址戳气,但是只需要郵政編碼句各,你就可以把地址轉(zhuǎn)換成郵政編碼吸占。您還可以將此過程視為提取子文本,但有時(shí)您可能不僅僅是提取子文本凿宾。這就是我們稱之為變換的原因旬昭。
  • 等待腳本Wait Script: 在處理動(dòng)態(tài)內(nèi)容時(shí),在異步加載到網(wǎng)頁(yè)上是很重要的菌湃。當(dāng)AJAX回調(diào)完成時(shí),Visual Web Ripper 無法自動(dòng)確定遍略,因此它等待頁(yè)面上的內(nèi)容發(fā)生變化惧所。您可以使用等待腳本來指定要完成的AJAX回調(diào)需要多長(zhǎng)時(shí)間。
  • 擴(kuò)展腳本Extension Script : 用于擴(kuò)展 Visual Web Ripper的功能绪杏。后處理腳本是一個(gè)擴(kuò)展腳本的示例下愈,該腳本可以用于將一些定制的業(yè)務(wù)邏輯應(yīng)用到提取的數(shù)據(jù)中。

腳本工具Script Utilities


腳本工具類使在Visual Web Ripper 腳本中訪問數(shù)據(jù)庫(kù)變得更容易蕾久。您可以定義一個(gè)共享腳本數(shù)據(jù)庫(kù)連接势似,該數(shù)據(jù)庫(kù)連接將為項(xiàng)目中的所有腳本提供訪問。在運(yùn)行腳本之前僧著,Visual Web Ripper 會(huì)自動(dòng)打開共享數(shù)據(jù)庫(kù)連接履因,并在腳本完成運(yùn)行后關(guān)閉連接。

您可以通過單擊腳本編輯器中的database按鈕來定義一個(gè)新的腳本數(shù)據(jù)庫(kù)連接或編輯現(xiàn)有的數(shù)據(jù)庫(kù)連接盹愚。


image.png

如果您已經(jīng)定義了一個(gè)共享腳本數(shù)據(jù)庫(kù)栅迄,那么Visual Web Ripper 將會(huì)將一個(gè)類WrSharedDatabase的實(shí)例傳遞給所有的腳本函數(shù)。WrSharedDatabase類有以下方法皆怕,不管您訪問的數(shù)據(jù)庫(kù)類型如何毅舆,它們都是相同的。

public   void  SetSql(string sql)   
  
public   void  PrepareSql()   
  
public   void  SetParameterTextValue(string parameterName, string value)   
  
public   void  SetParameterDateTimeValue(string parameterName, DateTime value)   
  
public   void  SetParameterIntValue(string parameterName,  int  value)   
  
public   void  SetParameterDoubleValue(string parameterName,  double  value)   
  
public   void  SetParameterNullValue(string parameterName)   
  
public  object ExecuteNonQuery()   
  
public  object ExecuteScalar()   
  
public  DataSet ExecuteDataSet()   
  
public  MySqlDataReader ExecuteMySqlDataReader()   
  
public  OleDbDataReader ExecuteOleDbDataReader()   
  
public  SqlDataReader ExecuteSqlDataReader()  

如果想直接在數(shù)據(jù)庫(kù)連接或命令對(duì)象上工作愈腾,可以使用WrSharedDatabase類的以下屬性憋活。

public  SqlConnection SqlConnection;   
public  MySqlConnection MySqlConnection;   
public  OleDbConnection OleDbConnection;   
  
public  SqlCommand SqlCommand;   
public  MySqlCommand MySqlCommand;   
public  OleDbCommand OleDbCommand;  

下面的代碼片段顯示了一個(gè)后處理腳本,該腳本使用一個(gè)共享腳本數(shù)據(jù)庫(kù)將提取的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)虱黄。

using  System;      
using  mshtml;      
using  VisualWebRipper;      
public   class  Script      
{      
     //See help for a definition of WrPostprocessArguments.      
     public   static   bool  Postprocess(WrPostprocessArguments args)      
    {      
         try      
        {      
             //First we set the SQL we'll use to insert data into the database table.      
             //The Database connection has already been set by defining a shared script       
             //database. Visual Web Ripper will automatically open and close the       
             //database connection.      
            args.Database.SetSql      
                ("insert into properties (type,fors,title,description,area)       
                values (@type,@fors,@title,@description,@area)");      
            args.Database.PrepareSql();      
                              
             //The first table contains the start URL. We only have one start URL in      
             //this project. ChildTableRows returns all rows in the first child table      
            foreach(WrDataRow finditRow in args.DataTable.ChildTableRows)      
            {      
                 //The next child table is the page navigation data table     
                foreach(WrDataRow pageRow in finditRow.ChildTableRows)      
                {      
                     //The last child table is where the property data is located     
                    foreach(WrDataRow propertyRow in pageRow.ChildTableRows)      
                    {      
                        args.Database.SetParameterTextValue( "@type" ,       
                            finditRow[ "type" ]);      
                        args.Database.SetParameterTextValue( "@fors" ,       
                            finditRow[ "fors" ]);      
                        args.Database.SetParameterTextValue( "@title" ,       
                            propertyRow[ "title" ]);      
                        args.Database.SetParameterTextValue( "@description" ,       
                            propertyRow[ "description" ]);      
                        args.Database.SetParameterTextValue( "@area" ,      
                            propertyRow[ "area" ]);      
                        args.Database.ExecuteNonQuery();      
                    }      
                }      
            }                 
             return   true ;     
        }      
         catch (Exception exp)      
        {      
            args.WriteDebug(exp.Message);      
             return   false ;      
        }      
    }      
}    

導(dǎo)出腳本Export Script


導(dǎo)出腳本可以用來定制數(shù)據(jù)導(dǎo)出過程悦即。可以使用導(dǎo)出腳本將提取的數(shù)據(jù)導(dǎo)出到數(shù)據(jù)庫(kù)中的自定義數(shù)據(jù)結(jié)構(gòu),也可以將數(shù)據(jù)導(dǎo)出到自定義數(shù)據(jù)源盐欺。

從數(shù)據(jù)導(dǎo)出屏幕中選擇導(dǎo)出腳本赁豆。


image.png

當(dāng)您單擊export script按鈕時(shí),導(dǎo)出腳本編輯器會(huì)打開冗美。

image.png

The ExportData Method
一個(gè)導(dǎo)出腳本必須有一個(gè)方法魔种,如下所示。

public static bool ExportData(WrExportArguments args)
{
    try
    {
        //Place your export code here.
        return true;
    }
    catch(Exception exp)
    {
        args.WriteDebug(exp.Message);
        return true;
    }
}

public static bool ExportData(WrExportArguments args)

ExportData()腳本方法必須有這個(gè)確切的名稱和簽名粉洼,所以只修改方法體节预,而不是方法簽名。該方法返回true属韧,表示成功或false表示失敗安拟。

Name Type Description
Project WrProject The current Visual Web Ripper project.
ExportData WrExportData The extracted data.
Database WrSharedDatabase An open database connection.
* See Script Utilities for more information about shared script databases.
InputDataRow WrDataRow The current input data row if an input data source has been defined.
* See Using an Input Data Source for more information about input data sources.
InputParameters WrInputParameters Input parameters for the current project.
* See Using Input Parameters for more information about input parameters.

WrExportArguments Properties

Name Type Description
Project WrProject The current Visual Web Ripper project.
ExportData WrExportData The extracted data.
Database WrSharedDatabase An open database connection.
* See Script Utilities for more information about shared script databases.
InputDataRow WrDataRow The current input data row if an input data source has been defined.
* See Using an Input Data Source for more information about input data sources.
InputParameters WrInputParameters Input parameters for the current project.
* See Using Input Parameters for more information about input parameters.

當(dāng)在調(diào)試模式下運(yùn)行一個(gè)項(xiàng)目時(shí),您可以使用它來將信息寫入調(diào)試窗口中宵喂。

Debugging an Export Script
調(diào)試一個(gè)導(dǎo)出腳本是很困難的糠赦,因?yàn)槟荒茉O(shè)置斷點(diǎn)并通過您的代碼。您可以通過在WrExportArguments類中使用WriteDebug方法來執(zhí)行簡(jiǎn)單的調(diào)試锅棕,返回false表示失敗拙泽。如果單擊數(shù)據(jù)導(dǎo)出屏幕上的Export Existing Data按鈕,腳本返回false裸燎,則消息框?qū)@示最后的調(diào)試消息顾瞻。

編寫一個(gè)復(fù)雜的導(dǎo)出腳本需要一個(gè)更好的調(diào)試環(huán)境,在這個(gè)環(huán)境中德绿,您可以遍歷代碼并查看變量的內(nèi)容荷荤。您可以創(chuàng)建一個(gè)簡(jiǎn)單的。在您的正常開發(fā)環(huán)境中移稳,例如Visual Studio中蕴纳,NET測(cè)試應(yīng)用程序。當(dāng)配置秒裕。使用Visual Web Ripper API的NET應(yīng)用程序袱蚓,遵循以下步驟:

  • 添加對(duì)Visual Web Ripper API DLLs的引用,它位于Visual Web Ripper安裝文件夾中几蜻。您應(yīng)該至少包括WebRipper.dll文件喇潘。
  • 平臺(tái)目標(biāo)必須是x86。
  • 應(yīng)用程序必須使用 .NET framework v4

.NET 測(cè)試應(yīng)用程序應(yīng)該為您的項(xiàng)目加載導(dǎo)出數(shù)據(jù)梭稚,然后調(diào)用ExportData方法颖低,如下所示。當(dāng)您的測(cè)試應(yīng)用程序工作時(shí)弧烤,您可以直接將ExportData方法復(fù)制到Visual Web Ripper 腳本編輯器中忱屑。

using System;
using System.Collections.Generic;
using System.Text;
using VisualWebRipper;

namespace DataExport
{
    class Program
    {
        static void Main(string[] args)
        {
            WrProject project = WrProject.LoadByName("projectName");
            WrExportData data = project.OpenExportedData();
            WrExportArguments exportArgs = new WrExportArguments(data, project);
            ExportData(exportArgs);
        }

        public static bool ExportData(WrExportArguments args)
        {
            try
            {
                //First we set the SQL we'll use to insert data into the database table.      
                //The Database connection has already been set by defining a shared script       
                //database. Visual Web Ripper will automatically open and close the       
                //database connection.      
                args.Database.SetSql("insert into properties (type,fors,title,description,area) values (@type,@fors,@title,@description,@area)");
                args.Database.PrepareSql();

                //Loop htough all eth export tables
                foreach (WrExportTableDefinition table in args.ExportData.TablesDefinitions.Tables)
                {
                    //Open a data reader for the current table
                    WrExportTableReader reader = args.ExportData.GetTableReader(table.TableName);
                    try
                    {
                        //Loop though all rows in the current data table and write them to the target database.
                        while (reader.Read())
                        {
                            args.Database.SetParameterTextValue("@type",
                                reader.GetStringValue("type"));
                            args.Database.SetParameterTextValue("@fors",
                                reader.GetStringValue("fors"));
                            args.Database.SetParameterTextValue("@title",
                                reader.GetStringValue("title"));
                            args.Database.SetParameterTextValue("@description",
                                reader.GetStringValue("description"));
                            args.Database.SetParameterTextValue("@area",
                                reader.GetStringValue("area"));
                            args.Database.ExecuteNonQuery();
                        }
                    }
                    finally
                    {
                        reader.Close();
                    }
                }
                return true;
            }
            catch (Exception exp)
            {
                args.WriteDebug(exp.Message);
                return false;
            }
        }
    }
}


































?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子莺戒,更是在濱河造成了極大的恐慌伴嗡,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件从铲,死亡現(xiàn)場(chǎng)離奇詭異瘪校,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)名段,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門阱扬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人伸辟,你說我怎么就攤上這事麻惶。” “怎么了信夫?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵窃蹋,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我静稻,道長(zhǎng)脐彩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任姊扔,我火速辦了婚禮,結(jié)果婚禮上梅誓,老公的妹妹穿的比我還像新娘恰梢。我一直安慰自己,他們只是感情好梗掰,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布嵌言。 她就那樣靜靜地躺著,像睡著了一般及穗。 火紅的嫁衣襯著肌膚如雪摧茴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天埂陆,我揣著相機(jī)與錄音苛白,去河邊找鬼。 笑死焚虱,一個(gè)胖子當(dāng)著我的面吹牛购裙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鹃栽,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼躏率,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起薇芝,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤蓬抄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后夯到,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嚷缭,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年黄娘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了峭状。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逼争,死狀恐怖优床,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情誓焦,我是刑警寧澤胆敞,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站杂伟,受9級(jí)特大地震影響移层,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赫粥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一观话、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧越平,春花似錦频蛔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至挣跋,卻和暖如春三圆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背避咆。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工舟肉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人查库。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓度气,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親膨报。 傳聞我的和親對(duì)象是個(gè)殘疾皇子磷籍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • Content Transformation 內(nèi)容轉(zhuǎn)換腳本用于在從網(wǎng)頁(yè)中提取內(nèi)容后轉(zhuǎn)換內(nèi)容适荣。內(nèi)容轉(zhuǎn)換通常用于HTM...
    游俠兒evil閱讀 787評(píng)論 0 0
  • 腳本語(yǔ)言又被稱為擴(kuò)建的語(yǔ)言,或者動(dòng)態(tài)語(yǔ)言院领,是一種編程語(yǔ)言弛矛,用來控制軟件應(yīng)用程序,腳本通常以文本(如ASCII)保存...
    Daimer閱讀 1,231評(píng)論 0 10
  • 官網(wǎng)原文:本章原文 建議打開原版對(duì)照著英文版同時(shí)閱讀比然。官網(wǎng)原文:在git上閱讀 建議打開原版對(duì)照著英文版同時(shí)閱讀丈氓。...
    阿龍學(xué)區(qū)塊鏈閱讀 1,029評(píng)論 0 2
  • 本文全面系統(tǒng)地介紹了shell腳本調(diào)試技術(shù),包括使用echo, tee, trap等命令輸出關(guān)鍵信息强法,跟蹤變量的值...
    liuzg0734閱讀 891評(píng)論 0 14
  • JMeter錄制 JMeter自身提供了http代理方式進(jìn)行錄制万俗,原理是解析網(wǎng)絡(luò)數(shù)據(jù)包,按Http協(xié)議包裝秤Htt...
    ottol閱讀 2,433評(píng)論 1 6