Share tool duyệt web theo lệnh

hunkel

Hero
Joined
Apr 21, 2015
Messages
614
Reactions
341
MR
0.308
Chat with me via Yahoo Messenger
Load cookie vs giải mã recaptcha thì viết sao các bác
 

quentenroi

Junior
Joined
Nov 12, 2014
Messages
146
Reactions
165
MR
0.001
Load cookie vs giải mã recaptcha thì viết sao các bác
load cookie thì gọi hàm xử lý javascript (RunJsCode, EvaluateScript, ...) cho nhanh còn recaptcha thì lặp rồi dùng hàm thôi bác. #2 sẽ hd sử dụng hàm và liệt kê các hàm có sẵn
 

mmohexi

Junior
Joined
Oct 4, 2016
Messages
229
Reactions
295
MR
0.132
#1
Đôi lời
Cái macro này (#Macro.dll) em tạo từ hồi khá lâu rồi. Lúc đó đang tìm hiểu về các khái niệm delegate, event, dynamic... của C# cộng thêm kí pháp Ba Lan em nảy ra ý tưởng viết một cái thư viện dùng để thông dịch một số đoạn lệnh cơ bản. Sau một thời gian tìm tòi nghiên cứu trên https://stackoverflow.com/, google.com, ... thì cũng xong. Một thời gian sau thì em biết tới thằng Geckofx lúc đó em mới kết hợp thêm nó vào để tạo ra được cái này #v1. Sau đó thì làm lại, chỉnh sửa một số thứ để được cái như giờ #v2. Do lúc đó mới chập chững học c# nên code khá là rối nên bác nào có xem mã nguồn thì thông cảm :).
Mục đích ban đầu của em khi làm cái này là để sử dụng cá nhân nên hơi khó sử dụng. Hiện tại thì em không có dự định cải tiến hay nâng cấp gì thêm nếu ko cần thiết (chỉ fix lỗi). Và một điều nữa là văn viết em hơi kém nên câu cú có phần lủng củng nên các bác bỏ qua cho.

Bắt đầu thôi

I. Tổng quan

Macro là một thư viện dùng để thông dịch và chạy một số lệnh cơ bản theo dòng từ trên xuống dưới. Bao gồm một số khái niệm: vùng, chỉ lệnh, biến, hằng, hàm dựng sẵn và thủ tục (mấy cái tên khái niệm này do em thấy tương tự với một số nnlt nên gọi vậy cho tiện).
Về cơ bản, khi chạy chương trình thì trước tiên nó sẽ duyệt qua toàn bộ lệnh xóa hết các *comment* sau đó tạo một bảng đánh dấu vị trí các nhãn, các thủ tục được khai báo. Rồi bắt đầu thực hiện chạy từng dòng code trừ trên xuống dưới. Vì phần kiểm tra lỗi với cú pháp em không làm kĩ nên đôi khi viết sai cú pháp thì có thể chương trình tắt luôn :( không hiện lỗi.

Chạy thử và kiểm lỗi.
Để chạy thử và kiểm lỗi thì các bác bật cái Warg.exe lên phía bên tay phải góc trên có một cái khung ghi Code Editor hãy viết các lệnh vào đó. Sau đó nhấn vào biểu tượng hình người bên dưới để chạy thử. Khi chạy thử thì nó sẽ bật sang Tab Console ở đây sẽ hiện các dòng lệnh đang chạy nếu có lỗi nó sẽ báo luôn ở đây. Góc trên cùng cuối thanh địa chỉ có một cái khung 00:00 đó là thời gian thực hiện lệnh. Bên dưới có một bảng Variable hiện thị tên biến và giá trị của biến trong chương trình. Ngoài ra có một khung (textbox) Code để chạy thử từng lệnh.
s6KsYQB.jpg


Trước khi đi vào chi tiết cần xem qua một số khái niệm:

1. Vùng:
Có 2 vùng cơ bản là vùng khái báo thủ tục và vùng thân chương trình. Cấu trúc cơ bản của 1 chương trình macro sẽ như thế này:

Code:
#proc
;vùng khai báo thủ tục
#code
;vùng thân ct

Khi chạy thì macro sẽ đọc qua một lượt các câu lệnh và xử lý phần #proc trước tiên. Nó sẽ lưu các thủ tục được khai báo vào bảng để dùng sau này.

2. Biến
Biến là một giá trị dữ liệu có thể thay đổi. Xem thêm #biến_là_gì

3. Hàm dựng sẵn
Là một số đoạn lệnh đã được định nghĩa sẵn chỉ việc sử dụng và có thể gọi lồng vào nhau. Thường viết hoa chữ cái đầu mỗi từ tên hàm.
ví dụ:
Code:
Sleep(RandL(1200, 2000))
sử dụng 2 hàm Sleep và RandL

4. Chỉ lệnh
Tương tự hàm dựng sẵn nhưng cách sử dụng hơi khác và không lồng vào nhau được. Chỉ lệnh thường được viết thường.
ví dụ: sleep 1000

5. Thủ tục
Tập hợp nhiều dòng lệnh được khai báo tại vùng #proc nhằm mục đích sử dụng lại những đoạn mã viết nhiều lần

Note:
  • Mỗi lệnh phải viết trên 1 dòng
  • Sử dụng dấu chấm phẩy ; để thể hiện một comment. Tất cả lệnh nằm sau dấu ; đều bị bỏ qua.
  • Dấu nháy đơn ' được sử dụng để xác định chuỗi.
  • Phân biệt chữ hoa thường
  • File macro có phần mở rộng là .brg

II. Khái niệm căn bản

1. Hằng

Một số giá trị không đổi được định nghĩa sẵn trong macro là:
- TRUE
- FALSE
- NULL

2. Toán tử
#toán_tử_là_gì
Toán tử số học gồm +, - , * , /
Toán tử điều kiện <, >, !=, <=, >=, ==
Toán tử quan hệ ||, &&
Note: Toán tử ! để đảo ngược giá trị luân lí được thay bằng hàm Not()

3. Biến và kiểu dữ liệu
Biến là giá trị có thể thay đổi trong macro ta có thể khai báo và gán giá trị ban đầu cho biến sau đó có thể thay đổi giá trị này.
Để khai báo biến dùng từ khóa
Code:
var
(nên gán giá trị cho biến khi khai báo).

Code:
;khai báo biến a
var a
;khai báo và gán giá trị cho biến b, c
var b = 12
var c = 'chuc mot ngay tot lanh'
;gan gia trị mới cho biến b
b=16

Macro có các kiểu dữ liệu chính: số, chuỗi (nằm trong dấu nháy đơn '), đối tượng (object)
Mặc định khi khai báo biến thì nó sẽ là kiểu dữ liệu object khi chạy (thông dịch) thì nó tự động xác định kiểu phù hợp với giá trị được gán.

4. Lệnh rẽ nhánh (if else)
Nếu muốn mô tả một đoạn chương trình kiểu như "Nếu gặp điều kiện C thì thực hiện hành động A, ngược lại, thực hiện hành động B" thì sử dụng cấu trúc rẽ nhánh.
Cú pháp rẽ nhánh đơn giản:
Code:
if(dieu_kien)
;doan lenh neu thỏa điều kiện
endif

Rẽ nhánh với if else
Code:
if(dieu_kien)
;doan lenh neu thoa dieu_kien
else
;lenh neu khong thoa dieu kien
endif

Hoặc

Code:
if(dieu_kien1)
;doan lenh neu thoa dieu_kien1
elseif(dieu_kien2)
;lenh neu thoa dieu kien 2
else
;lenh neu khọng thoa dk 1 va dk 2
endif

ví dụ:
Code:
var a = 13
if(a < 10)
a = 15
else
a=5
endif

5. Nhãn và lệnh lặp
Nhãn là một chuỗi để đánh dấu vị trí của dòng lệnh trong chương trình.
Để tạo một nhãn dùng cú pháp
Code:
ten_nhan:NOP
ví dụ: tạo 1 nhãn tên danh_dau
Code:
var a = 6
  danh_dau:NOP
  var b =5

Lệnh lặp để lặp đi lặp lại một số đoạn lệnh nhiều lần ta sử dụng lệnh jmp hoặc jmpif kết hợp với nhãn tạo sẵn.
  • jmp:ten_nhan - nhảy về nhãn được chỉ định
  • jmpif(dieu_kien):ten_nhan - nhảy về nhãn được chỉ định nếu thỏa điều kiện

ví dụ: tạo một vòng lặp và tính tổng từ 1->10

Code:
var i =1
var sum = 0
;tạo 1 nhãn ở đây để nhảy về
loop:NOP
sum = sum + i
i = i + 1
;nhay neu i con be hon 10
jmpif(i < 10):loop
WritelnToConsole(sum + '')

Note: không được nhảy từ bên trong đoạn if ra ngoài if như ví dụ dưới (macro vẫn chạy nhưng không đúng).
Code:
var s = 0
loop:NOP
if(s < 10)
;loi vi nhảy ra khỏi vùng if
jmp:loop
endif

6. Thủ tục
Để tránh viết nhiều lần những đoạn lệnh thường xuyên sử dụng ta có thể khai báo đoạn lệnh đó thành một thủ tục để sử dụng nhiều lần sau này.
Cú pháp khai báo thủ tục như sau:
Code:
proc ten_thu_tuc
     ; lenh o day
     ret
  endp

Để sử dụng thủ tục ta dùng chỉ lệnh call ten_thu_tuc

Note:

  • thủ tục được khai báo ở vùng #proc
  • 3 từ khóa chình không thể thiếu khi khai báo thủ tục proc, ret và endp
  • chỉ lệnh `call ten_thu_tuc` khi thông dịch thì macro copy tất cả các lệnh trong ten_thu_tuc chèn vào. Vì vậy tất cả biến trong thủ tục cũng như trong chương trình chính đều như nhau (có thể truy xuất).

ví dụ: tạo 1 thủ tục tính tổng

Code:
#proc
proc tinh_tong
a = b + c
ret
endp
#code
var a
var b= 8
var c=9
;goi thủ tục tính tổng
call tinh_tong
WritelnToConsole(a + '')


III. Một số chỉ lệnh

Note: chữ in nghiêng đậm là tên chỉ lệnh, chữ nằm nghiêng như này là cú pháp sử dụng.

errorignore - cài đặt có bỏ qua lỗi hay không (nếu FALSE thì gặp lỗi nó sẽ dừng chạy)
errorignore TRUE hoặc errorignore FALSE

timeoutignore - cặt đặt bỏ qua timeout của trình duyệt
timeoutignore TRUE hoặc timeoutignore FALSE

NOP - không làm gì cả, gặp lệnh này thì nó bỏ qua chạy lệnh tiếp theo.
NOP

call - chạy một thủ tục(nt)

execif - lệnh rút gọn của if.. endif. Chạy đoạn lệnh đằng sau nếu thỏa điều kiện if
Code:
;dừng ct 1 giây nếu a = 2
execif(a == 2):sleep 1000

include - copy nội dung của 1 file macro (đuôi .brg) vào vị trí hiện hành
include 'duong_dan_toi_file.brg'
Nếu file đó nằm trong thư mục Nazgul/Macro thì đường dẫn sẽ là Macro\ten_file
include 'Macro\ten_file.brg'

sleep
- tạm dừng trong một khoảng milli giây
sleep 1000 - tạm ngừng 1 giây
sleep cũng có thể dùng với biến
Code:
var r = 2000
sleep r

tab - chọn tab theo số thứ tự. Mỗi khi mở một tab mới thì nó sẽ gán môt số thứ tự cho tab bắt đầu từ 1. Luôn có một tab chính mặc định khi chạy(maintab) nó có số thứ tự là 0.
tab 1

findtab- tìm kiếm tab trong đống tab đang mở theo đường dẫn
Code:
findtab google.com
Code:
findtab facebook

closetab - đóng tab
closetab 1

maintab
- chọn lại tab chính ban đầu
maintab tương đương với lệnh tab 0

closeallothers - đóng tất cả các tab trừ tab chính
closeallothers

enabledmessageevent - bật tắt messageevent

Còn tiếp...
Hay quá, cám ơn bạn. mình đang vọc cái này!
 
25/10/2019
Cập nhật và sửa lỗi

Macro

+ Thêm vào cấu trúc vòng lặp while - có thể sử dụng lồng vào nhau. Thay vì sử dụng mấy lệnh nhảy để làm vòng lặp gây phiền toái và khó kiểm soát thì có thể dùng cấu trúc while...endwhile :))
cấu trúc:
Code:
while(điều_kiện)

;cau lenh

;cau lenh

endwhile

có thể sử dụng lệnh break, continue để thoát hoặc bỏ qua vòng lặp trong while...endwhile
e.g.
Code:
var t = 0

while(t < 50)
  t = t + 2
  execif(t == 10):continue
  execif(t > 20):break
  WritelnToConsole(t)
endwhile

+ Thêm một số hàm
BringToFront, TopMost, ToggleTopMost, ExecuteCommandSync, ExecuteCommand

+ Thêm và sửa một số chi tiết nhỏ nhặt :v

Morgoth
+
Sửa một số lỗi và thêm một vài chức năng ko hề nhỏ nhặt :v

----------------------------------------------------------------------------------
Tips: Để chọn ngẫu nhiên useragent các bác sửa file useragent.txt trong thư mục Arguments/Random. Tương tự với thay đổi kích thước màn hình thì sửa file size.txt
----------------------------------------------------------------------------------
Download: https://drive.google.com/file/d/1CzZLMFUs2yUQHKqpQpdqqnk98lY35ZWY/view?usp=sharing

Bác nào ko muốn tải cả đống trên thì có thể tải từng file sau https://drive.google.com/drive/folders/1ZsQLNj05dNWRXJvWgXn9Iz8agW_Zka3o?usp=sharing rồi dán đè vào các file cũ. Sau đó thêm thư mục Multiple trong thư mục Arguments
 

Announcements

Today's birthdays

Forum statistics

Threads
425,405
Messages
7,156,606
Members
177,950
Latest member
BuiQC
Back
Top Bottom