Bài 2 – Debug Plugin và làm quen với biến Client.

Đây là bài thứ 2 trong loạt bài hướng dẫn cách viết Plugin cho All1Tool. Chào mọi người, trong bài này mình sẽ hướng dẫn các bạn cách debug plugin mà bạn đang viết, và sẽ giới thiệu một biến cực kì quan trọng trong plugin đó là Client (thuộc lớp All1WebClient).

1. Cách debug plugin.

(Nếu bạn chưa biết debug nghĩa là gì, thì bạn nên google khái niệm debug và cách debug cơ bản trong Visual Studio)
Vì hiện tại project plugin của mình là dạng Class Library vì vậy không thể chạy trực tiếp, mà phải dựa vào file All1Tool.exe.

– Mở project mà bạn đã tạo ra ở bài 1, chuột phải lên project chọn properties – Vào tab Debug, Phần Start Option chọn Start External program, ở khung kế bên click vào …., và chọn tới file All1Tool.exe. Phần Working Directory: Chọn thư mục chứa All1Tool.exe

Capture 6

 

——————————————–Lưu ý, cho những bạn dùng vs express————————————————————–

(Lưu ý: Theo mình biết thì bản visual sutdio express, không hỗ trợ giao diện cho phần start external program. Vì vậy bạn cần phải edit file config của project như sau (những bạn ko dùng bản express thì ko cần làm bước này):

Trong thư mục chứa project có file MyFirstPlugin.csproj.user, chuột phải chọn mở với Notepad (hoặc những trình edit text nào mà bạn có)

Thêm các dòng sau vào tag PropertyGroup:

<StartAction>Program</StartAction>
<StartProgram>C:\Users\n.bui\Desktop\All1Tool 2.60\All1Tool.exe</StartProgram>
<StartWorkingDirectory>C:\Users\n.bui\Desktop\All1Tool 2.60\</StartWorkingDirectory>

Thay phần text trong StartProgram bằng đường dẫn tới file All1Tool.exe

Thay phần text trong StartWorkingDirectory bằng đường dẫn tới thư mục chứa All1Tool.exe

Thông thường ta được file như sau:

<?xml version=”1.0″ encoding=”utf-8″?>
<Project ToolsVersion=”4.0″ xmlns=”http://schemas.microsoft.com/developer/msbuild/2003″&gt;
<PropertyGroup Condition=”‘$(Configuration)|$(Platform)’ == ‘Debug|AnyCPU'”>
<StartAction>Program</StartAction>
<StartProgram>C:\Users\n.bui\Desktop\All1Tool 2.60\All1Tool.exe</StartProgram>
<StartWorkingDirectory>C:\Users\n.bui\Desktop\All1Tool 2.60\</StartWorkingDirectory>
</PropertyGroup>
</Project>

————————————————————————————————————————————-

Ok tiếp đến.

 

– Chọn qua tab Build event, trong phần Post Build Event Command Line điền vào như sau:

xcopy /Q /Y “$(TargetDir)$(TargetName).*” “Đường dẫn”

Thay “Đường dẫn” bằng đường dẫn đến thư mục plugins của tool chính. Ví dụ đường dẫn thư mục plugins là “D:\Working\All1ToolRelease\FullFolder\Plugins” thì câu lệnh bạn phải điền vào là:

xcopy /Q /Y “$(TargetDir)$(TargetName).*” “D:\Working\All1ToolRelease\FullFolder\Plugins”

Capture 7 Với câu lệnh này, mỗi lần bạn build project, Visual studio sẽ tự động copy 2 plugin của bạn tới folder Plugins của tool. (Không cần phải copy bằng tay như ở Bài 1).

Sau đó save lại.

– Mở file HelloWorldPlugin.cs và thử đặt 1 breakpoint ở dòng  File.WriteAllText(“HelloWorldFile.txt”, “Hello World!”);

– Nhấn F5 để tiến hành debug. Nếu bạn điền đúng giá trị, lúc này All1Tool sẽ được chạy, và lúc bạn chạy 1 site dùng plugin của bạn, thì chương trình sẽ dừng lại trong visual studio ngay dòng bạn vừa đặt break point.

Capture 8 2. Cơ bản về biến Client trong Plugin.

Khi plugin của bạn kế thừa từ lớp All1PluginScript, thì trong lớp đó đã có biến/property Client, với mục đích phục vụ bạn gửi và nhận request từ/đến site mà bạn muốn auto.

Bắt đầu lấy site prom247.com làm ví dụ :D.

Trong phương thức Begin, xóa dòng lệnh ghi file, và chèn vào dòng lệnh sau

 public override All1ActionResult Begin(object arg)
 {
 Client.GetRequest("login.html");
 return new All1NextMethodResult { NextMethod=End };
 }

Chạy debug lần nữa và đặt breakpoint ở dòng lệnh return new All1NextMethodResult { NextMethod=End };, Add một site mới vào tool với thông tin:
– Site: http://prom247.com
– Script: PluginCustom, Plugin: HelloWorldPlugin.
Khi chạy site đó bằng tool, chương trình sẽ dừng lại ngày chỗ bạn đặt breakpoint. Rê chuột lên biến Client ở trên, visual studio sẽ cho bạn biết thông tin của biến đó.

– với dòng lệnh Client.GetRequest(“login.html”); Đây là dòng lệnh yêu cầu send 1 request tới server, kiểu request là GET. Phần tham số là đường dẫn phía sau tên site.
Ví dụ bạn muốn lấy trang web http://prom247.com/login.html -> thì bạn chỉ cần truyền “login.html” là đủ.

– Sau khi câu lệnh trên được thực hiện, biến Client sẽ chứa những thông tin sau đây:
+ Client.ResponseStr: thông tin trang web được trả về dưới dạng string.
+ Client.ResponseDoc: thông tin trang web được trả về dưới dạng cây DOM. đây là một kiểu Document thuộc thư viện Agility Html, ta sẽ làm việc đa số với kiểu này trong suốt qua trình viết plugin.
+ Client.ResponseFullUrl: đường dẫn trả về

Tới lúc này, bạn coi như đã lấy thông tin đầy đủ của trang http://prom247.com/login.html, tiếp đến phần sau, mình sẽ hướng dẫn chi tiết làm thế nào đễ viết auto cơ bản cho 1 trang web dựa trên trang prom247.com.

One comment

Leave a comment