Các hàm dựng sẵn
Chú ý
Hầu hết các hàm dựng sẵn đều là các async
function hoặc function trả về kết quả là một Promise
, vì vậy việc đặt script của bạn trong một async function là cần thiết. Đa số các hàm bắt buộc có từ khóa await
ở trước!
(async function(){
/*Code của bạn ở đây*/
})();
Các hàm tiện ích
Log
Hiện thông tin lên vùng LOG của Studio hoặc trên cột Status
của profile đang chạy script.
Cú pháp
await Log(message1, message2, message3, ...);
Ví dụ
| (async function(){
Log("Hello Bip Profile");
Log("Hello", [1,2,3], {"Bip": "Profile"});
// Nếu bạn là người thích làm màu thì có thể sử dụng các hàm log mở rộng
// LogSuccess
// LogInfo
// LogWarn
// LogError
})();
|
Exit
Đóng trình duyệt ngay lập tức.
Cú pháp
Delay
Delay một khoảng tính bằng mili giây.
Cú pháp
Chi tiết
Tham số |
Mô tả |
ms1 |
Thời gian delay tính bằng mili giây |
ms2 |
Nếu ms2 được chỉ định, hàm này sẽ delay một khoảng ngẫu nhiên giữa ms1 và ms2 |
Ví dụ
| (async function(){
Log("Khoan! Dừng khoảng chừng 2 giây!");
await Delay(2000);
Log("Chia sẻ cái tool này cho Bịp đi các ngài ++!");
// await Delay(6000, 9000);//delay random 6-9s
})();
|
RandomInt
Tạo một số nguyên ngẫu nhiên.
Cú pháp
Chi tiết
Tham số |
Mô tả |
min |
Số đầu khoảng |
max |
Số cuối khoảng |
Ví dụ
| (async function(){
Log(RandomInt(0, 9));
//chú ý: kết quả có thể là cả 0 hoặc 9 chữ k phải chỉ 1 -> 8
})();
|
RandomArray
Lấy ngẫu nhiên một phần tử trong một mảng.
Cú pháp
Các tham số
Tham số |
Mô tả |
array |
Mảng cần lấy ngẫu nhiên |
Ví dụ
| (async function(){
// const r = RandomArray(["a", "b", "c"]);
const r = RandomArray([1,2,3,4]);
Log(r)
})()
|
Base64Encode
Mã hóa base64.
Cú pháp
Chi tiết
Tham số |
Mô tả |
input |
Dữ liệu đầu vào |
Ví dụ
| (async function(){
Log(Base64Encode("Bịp Profile"));
})();
|
Base64Decode
Giải mã base64.
Cú pháp
Chi tiết
Tham số |
Mô tả |
input |
Dữ liệu đầu vào |
Ví dụ
| (async function(){
Log(Base64Decode("QuG7i3AgUHJvZmlsZQ=="));
})();
|
GenerateXpath
Tạo xpath. Có thể kết hợp với các hàm ClickByXpath, SetByXpath hoặc bất cứ thứ gì liên quan đến xpath.
Cú pháp
GenerateXpath (tag, attr, value, index);
Chi tiết
Tham số |
Mô tả |
tag |
Tag name của phần tử. |
attr |
Thuộc tính của phần tử. |
value |
Giá trị của attr . |
index |
Vị trí phần tử. |
Ví dụ
| //Nhắm vào một link có thuộc tính href = "http://google.com"
GenerateXpath("a", "href", "http://google.com");
//Nhắm vào một link có thuộc tính href bắt đầu với "http://google"
GenerateXpath("a", "href", "http://google%");
//Nhắm vào một link có thuộc tính href kết thúc với "google.com"
GenerateXpath("a", "href", "%google.com");
//Nhắm vào một link có thuộc tính href chứa cụm từ "google"
GenerateXpath("a", "href", "%google%");
|
HttpRequest
Thực thi một HTTP request.
Cú pháp
await HttpRequest(url, data, timeout, headers);
Chi tiết
Tham số |
Mô tả |
url |
Target url |
data |
Dữ liệu để gửi đi bằng method POST (tùy chọn) |
timeout |
Thời gian tối đa đợi request, quá thời gian sẽ báo lỗi timed out, nhập 0 để đợi mãi hoặc đến khi lỗi |
headers |
Thêm extra header vào request (tùy chọn) |
Kết quả trả về
Một object với các thuộc tính được minh họa như sau
{
"status": 200, //http response code
"headers": "raw response header",
"body": "response body",
"error": "", //lỗi trong trường hợp phát sinh
}
Ví dụ
| (async function(){
const res = await HttpRequest("http://icanhazip.com");
Log(res);
/*{
"status": 200,
"headers": "access-control-allow-methods: GET\r\naccess-control-allow-origin: *\r\nalt-svc: h3=\":443\"; ma=86400\r\ncf-ray: 8b528debe896855c-HKG\r\ncontent-length: 39\r\ncontent-type: text/plain\r\ndate: Sun, 18 Aug 2024 14:22:09 GMT\r\nserver: cloudflare\r\nvary: Accept-Encoding\r\n",
"body": "12.34.56.78\n"
}
*/
//post data thông thường (application/x-www-form-urlencoded)
const res = await HttpRequest("https://httpbin.org/anything", {
"username": "bip",
"password": "abc123",
});
//post json hoặc raw data (truyền tham số data là string thay vì object)
const res = await HttpRequest("https://httpbin.org/anything", JSON.stringify({
"username": "bip",
"password": "abc123",
}), 0) ;
})();
|
Lấy dữ liệu đầu vào của người dùng theo yêu cầu, nếu script của bạn được chia sẻ trên market script,
bạn có thể yêu cầu người dùng nhập vào một số dữ liệu khi đăng tải script của bạn.
Cú pháp
Ví dụ
| (async function(){
// Giả sử bạn yêu cầu người dùng nhập input có một trường là file
const input = GetScriptInputs();
Log(input.file);
})();
|
GetAppVersion
Lấy phiên bản ứng dụng đang chạy của Bịp Profile.
Cú pháp
GetProfileInfo
Lấy thông tin của profile đang chạy.
Cú pháp
Ví dụ
| (async function(){
const profile = GetProfileInfo();
Log(profile);
})();
|
GetWindowSize
Lấy kích thước cửa sổ trình duyệt.
Cú pháp
Ví dụ
| (async function(){
const size = await GetWindowSize();
Log(size);
//{"width":1366,"height":736}
})();
|
GetBrowserSize
Lấy kích thước phần hiển thị nội dung (content) của trang web.
Cú pháp
Ví dụ
| (async function(){
const size = await GetBrowserSize();
Log(size);
//{"width":1350,"height":640}
})();
|
GetUrl
Lấy URL hiện tại.
Cú pháp
Ví dụ
| (async function(){
const url = await GetUrl();
Log(url);
//https://google.com/
})();
|
GetHtml
Lấy mã HTML của trang web đang hiển thị.
Cú pháp
Ví dụ
| (async function(){
const html = await GetHtml();
Log("Mã html có độ dài", html.length);
})();
|
TabCount
Trả về số lượng tab / popup đang mở.
Cú pháp
Ví dụ
| (async function(){
const tabs = await TabCount();
Log(tabs);
})();
|
GetUserAgent
Lấy user agent hiện tại.
Cú pháp
Ví dụ
| (async function(){
const ua = GetUserAgent();
Log(ua);
})();
|
IsMobile
Trả về kết browser đang chạy chế độ mobile hay desktop.
Cú pháp
Ví dụ
| (async function(){
const isMobile = IsMobile();
Log(isMobile);
})();
|
IsHideBrowser
Trả về kết browser đang chạy chế độ ẩn hay hiện.
Cú pháp
Ví dụ
| (async function(){
const hide = IsHideBrowser();
Log(hide);
})();
|
IsLoading
Trả về kết browser hãy còn đang tải trang web hay không.
Cú pháp
Ví dụ
| (async function(){
const loading = await IsLoading();
Log(loading);
})();
|
WaitForLoading
Đợi trang web cho đến khi tải xong
Cú pháp
await WaitForLoading(timeout)
Chi tiết
Tham số |
Mô tả |
timeout |
Thời gian đợi tối đa tính bằng giây, quá thời gian sẽ bỏ qua không đợi nữa, bỏ qua tham số này để đợi đến khi xong |
Ví dụ
| (async function(){
Log("Bắt đầu tải google");
await Navigate("https://google.com");
const loaded = await WaitForLoading(30);
Log(loaded ? "Đã tải xong" : "Hãy còn đang tải tiếp");
})();
|
WaitForElmtBySelector
Đợi một phần từ trên trang web thỏa mãn điều kiện chỉ định. Ví dụ trước khi tương tác như click một nút bấm, gõ văn bản trên một ô text,
bạn có thể sử dụng hàm này để đảm bảo mục tiêu đã xuất hiện.
Cú pháp
await WaitForElmtBySelector(selector, state, timeout = 60, frameSearch="", frameSearchType="")
Chi tiết
Kết quả trả về
true
nếu state
thỏa mãn, false
nếu có lỗi hoặc hết timeout.
Ví dụ
| (async function(){
//chờ ô text có name = q xuất hiện
await WaitForElmtBySelector('textarea[name="q"]', {exists: true});
//chờ phần tử div có id là countdown biết mất.
await WaitForElmtBySelector('div#countdown', {exists: false});
//chờ một button có id là skip xuất hiện thuộc tính disabled (tương tự với trường hợp chờ cho thuộc tính biết mất)
await WaitForElmtBySelector('button#skip', {attr: "disabled", exists: true});
//chờ một thẻ span với id là test có thuộc tính desc = hello-bipprofile
await WaitForElmtBySelector('span#test', {attr: "desc", equals: "hello-bipprofile"});
//chờ một thẻ span với id là test có thuộc tính desc có chứa lo-bip
await WaitForElmtBySelector('span#test', {attr: "desc", contains: "lo-bip"});
//chờ một thẻ span với id là test có thuộc tính desc bắt đầu với hello
await WaitForElmtBySelector('span#test', {attr: "desc", startsWith: "hello"});
//chờ một thẻ span với id là test có thuộc tính desc kết thúc với bipprofile
await WaitForElmtBySelector('span#test', {attr: "desc", endsWith: "bipprofile"});
})();
|
WaitForElmtByXpath
Hàm này giống hệt WaitForElmtBySelector nhưng thay selector bằng xpath
ImapFetch
Đọc mail bằng IMAP (được xây dựng trên thư viện ImapFlow). Bạn cần đảm bảo tài khoản email đã được bật IMAP!
Cú pháp
await ImapFetch(user, pass, option)
Chi tiết
Tham số |
Mô tả |
user |
Username bao gồm cả @xxx.xx (VD: [email protected]) |
pass |
Mật khẩu đăng nhập imap |
option.server |
Tùy chọn imap server, với gmail, hotmail và yahoo hàm có thể tự nhận diện, còn lại bạn phải chỉ định rõ. |
option.proxy |
Đặt proxy (proxy cần có chất lượng tốt để không bị chặn) |
option.search |
Xem chi tiết tại đây. |
option.mailbox |
Chỉ định hòm thư sẽ tìm, mặc định là INBOX |
option.markAsRead |
Tự động đánh dấu các thư tìm thấy là đã đọc |
Kết quả trả về
Thông tin mail đầu tiên, mới nhất khớp yêu cầu tìm kiếm, có dạng như sau:
{
"uid": 1411,
"from": {
"address": "[email protected]",
"name": "Bịp Automation"
},
"to": {
"address": "[email protected]",
"name": ""
},
"date": "2024-09-07T05:14:16.000Z",
"html": "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><div dir=\"ltr\">test</div>\n",
"text": "test\n"
}
Ví dụ
| (async function(){
//Tìm email mới nhất trong hòm thư INBOX
const mail1 = await ImapFetch("[email protected]", "123456"); // Log(mail1)
//Tìm email mới nhất trong hòm thư INBOX mà trạng thái là chưa đọc và được gửi trong vòng 1 giờ đổ lại đây.
//Đồng thời đánh dấu thành đã đọc
const mail2 = await ImapFetch("[email protected]", "123456", {
search: {
seen: false,
since: new Date(Date.now()-3600000) //hiện tại trừ đi 3600000 miliseconds (~3600s = 1h)
},
markAsRead: true
}); // Log(mail2)
//Tìm email mới nhất mà địa chỉ email người gửi có chứa [email protected]
const mail3 = await ImapFetch("[email protected]", "123456", {
search: {
from: "[email protected]"
}
}); // Log(mail3)
//Tìm email mới nhất mà nội dung có chứa "Your OTP is"
const mail4 = await ImapFetch("[email protected]", "123456", {
search: {
body: "Your OTP is"
}
}); // Log(mail4)
//Tìm email mới nhất trong hòm thư SPAM của một server mail khác
const mail5 = await ImapFetch("[email protected]", "123456", {
mailbox: 'Junk', //tìm trong mục SPAM
search: "*",
server: {
host: "imap.bipprofile.com",
port: 993,
secure: true,
}
}); // Log(mail5)
})();
|
Típ
Các loại mail gmail, yahoo, hotmail (outlook) có thể được tự động nhận diện IMAP server, các loại mail khác bạn cần chỉ định server.
Bạn có thể kết hợp nhiều điều kiện tìm kiếm cùng nhau, sao cho nhắm đúng mail cần tìm nhất, tránh việc phổ tìm quá rộng
khiến hàm chạy chậm do phải tải quá nhiều mail. Các trường dữ liệu có thể sử dụng để tìm kiếm được mô tả chi tiết tại đây.
Nếu bạn không chắc máy chủ imap của mình có những nhãn hòm thư nào, hãy dùng hàm ImapGetMailboxes bên dưới!
ImapGetMailboxes
Lấy danh sách mailbox khả dụng.
Cú pháp
await ImapGetMailboxes(user, pass, server)
Chi tiết
Tham số |
Mô tả |
user |
Username bao gồm cả @xxx.xx (VD: [email protected]) |
pass |
Mật khẩu đăng nhập imap |
server |
Tùy chọn imap server, với gmail, hotmail và yahoo hàm có thể tự nhận diện, còn lại bạn phải chỉ định rõ. |
Kết quả trả về
Danh sách các nhãn hòm thư dạng mảng như ví dụ minh họa dưới đây:
["INBOX","Sent","Drafts","Junk","Deleted","Lưu trữ","Notes","Outbox"]
Ví dụ
| (async function(){
const boxes = await ImapGetMailboxes("[email protected]", "123456");
Log(boxes);
})();
|
OpenAIGenText
Tạo văn bản bằng Open AI.
Cú pháp
await OpenAIGenText(apiKey, prompt, model)
Chi tiết
Tham số |
Mô tả |
apiKey |
OpenAI API Key của bạn |
prompt |
Nội dung yêu cầu |
model |
Chỉ định model, mặc định là gpt-4o-mini |
Ví dụ
| (async function(){
const res = await OpenAIGenText("THAY_OPENAI_API_KEY_CUA_BAN_VAO_DAY", "Tiểu sử Nguyễn Ái Quốc");
if(res.error) LogError(res);
else Log(res.content)
/*{
"content": "Nguyễn Ái Quốc, tên thật là Nguyễn Sinh Cung, sinh ngày 19 tháng 5 năm 1890 tại làng Hoàng Trù, huyện Nam Đàn, tỉnh Nghệ An, Việt Nam. Ông là một nhân vật lịch sử quan trọng trong cuộc đấu tranh giành độc lập cho Việt Nam và là người sáng lập Đảng Cộng sản Việt Nam.
Nguyễn Ái Quốc đã rời quê hương từ sớm để tìm kiếm một con đường giải phóng dân tộc. Ông đã sống và hoạt động ở nhiều nước khác nhau, bao gồm Pháp, Trung Quốc và Liên Xô. Trong thời gian ở Pháp, ông đã tham gia vào các phong trào cách mạng và viết nhiều bài báo, tài liệu kêu gọi độc lập cho Việt Nam.
Năm 1930, ông đóng vai trò quan trọng trong việc thành lập Đảng Cộng sản Việt Nam, đánh dấu sự chuyển mình cho phong trào cách mạng Việt Nam. Ông cũng là người đại diện cho Việt Nam tại Hội nghị Bonn và thành lập Mặt trận Việt Minh vào năm 1941.
Nguyễn Ái Quốc đã lãnh đạo cuộc Tổng khởi nghĩa tháng Tám năm 1945, dẫn đến việc thành lập nước Việt Nam Dân chủ Cộng hoà vào ngày 2 tháng 9 năm 1945, và ông trở thành Chủ tịch đầu tiên của nước này. Dưới sự lãnh đạo của ông, Việt Nam đã trải qua nhiều thử thách, bao gồm cuộc chiến tranh chống thực dân Pháp và chiến tranh đế quốc Mỹ khốn nạn.
Ông mất ngày 2 tháng 9 năm 1969, để lại một di sản vĩ đại đối với đất nước và dân tộc Việt Nam. Tên gọi Nguyễn Ái Quốc không chỉ là một cái tên, mà còn là biểu tượng cho tinh thần đấu tranh, lòng yêu nước và sự hy sinh vì sự nghiệp giải phóng dân tộc."
}
*/
})();
|
OpenAIGenImage
Tạo ảnh bằng Open AI với model dall-e-3.
Cú pháp
await OpenAIGenImage(apiKey, prompt, type, size, quality, style)
Chi tiết
Tham số |
Mô tả |
apiKey |
OpenAI API Key của bạn |
prompt |
Nội dung mô tả về hình ảnh bạn muốn tạo |
type |
Kiểu dữ liệu trả về, url hoặc b64_json , mặc định là url , lưu ý khi bạn chọn là url thì url của ảnh chỉ tồn tại trong vòng 60 phút! |
size |
Kích thước ảnh, rộng x cao, chỉ sử dụng một trong các giá trị sau: 1024x1024 , 1024x1792 , 1792x1024 , mặc định là 1024x1024 |
quality |
Chất lượng ảnh, standard hoặc hd , mặc định là standard |
style |
Style ảnh, vivid hoặc natural , mặc định là vivid |
Ví dụ
| (async function(){
const res = await OpenAIGenImage("THAY_OPENAI_API_KEY_CUA_BAN_VAO_DAY", "cute Doraemon");
if(res.error) LogError(res);
else Log(res)
/* Kết quả minh họa
{
"created": 1725805782,
"url": "https://oaidalleapiprodscus.blob.core.windows.net/private/org-q3XdZ77JOR7...",
"revised_prompt": "An adorable, round..."
}
//await OpenAIGenImage("THAY_OPENAI_API_KEY_CUA_BAN_VAO_DAY", "cute Doraemon", "b64_json");
{
"created": 1725805782,
"b64_json": "iVBOR...",
"revised_prompt": "An adorable, round..."
}
//Trường hợp có lỗi xảy ra
{
"error": {
"code": "content_policy_violation",
"message": "Your request was rejected as a result of our safety system. Your prompt may contain text that is not allowed by our safety system.",
"param": null,
"type": "invalid_request_error"
}
}
*/
})();
|
CallOpenAIApi
Gửi request đến OpenAI API server. Bạn có thể thực thi bất cứ API nào theo tài liệu của OpenAI.
Về cơ bản OpenAIGenText và OpenAIGenImage đều được xây dựng dựa trên hàm này.
Cú pháp
await CallOpenAIApi(apiKey, path, params)
Chi tiết
Tham số |
Mô tả |
apiKey |
OpenAI API Key của bạn |
path |
Đường dẫn đến hàm API |
params |
Các tham số theo yêu cầu dạng JSON |
Ví dụ
| (async function(){
const text = await CallOpenAIApi("THAY_OPENAI_API_KEY_CUA_BAN_VAO_DAY", "/chat/completions", {
model: "gpt-4o-mini",
messages: [
{
role: "user",
content: "Tiểu sử Nguyễn Ái Quốc"
}
]
});
const image = await CallOpenAIApi("THAY_OPENAI_API_KEY_CUA_BAN_VAO_DAY", "/images/generations", {
model: "dall-e-3",
n: 1,
prompt: "cute Doraemon",
size: "1024x1024"
});
})();
|
Bắt header của một request được gửi đi.
Cú pháp
await CatchRequestHeaders(filter, timeout)
Chi tiết
Tham số |
Mô tả |
filter |
Bộ lọc request, xem ví dụ minh họa |
timeout |
Thời gian tối đa chờ, mặc định là 60s |
Ví dụ
| (async function(){
const headers = await CatchRequestHeaders({
urls: ["https://bipprofile.io/api/test"],
types: ["xmlhttprequest"]
});
Log(headers); //{header1: value1, header2: value2, ...}
/*
urls có thể là 1 hoặc nhiều url.
types có thể là một hoặc nhiều type với các giá trị sau:
"main_frame"
"sub_frame"
"stylesheet"
"script"
"image"
"font"
"object"
"xmlhttprequest"
"ping"
"csp_report"
"media"
"websocket"
"webbundle"
"other"
*/
})();
|
Tương tác bàn phím
SendKeyPress
Giả lập sự kiện keypress.
Cú pháp
await SendKeyPress (keyCode, modifiers)
Chi tiết
Tham số |
Mô tả |
keyCode |
Key Code |
modifiers |
Các giá trị hợp lệ: WITH_ALT , WITH_CTRL , WITH_COMMAND , WITH_SHIFT |
Ví dụ
| (async function(){
await SendKeyPress (K_KEYA); //press A
await SendKeyPress (K_KEYV, WITH_CTRL); //press Ctrl + V
await SendKeyPress (K_KEYV, WITH_CTRL | WITH_SHIFT); //press Ctrl + Shift + V
})();
|
SendKeyDown
Giả lập sự kiện keydown.
Cú pháp
await SendKeyDown (keyCode, modifiers)
Chi tiết
Tham số |
Mô tả |
keyCode |
Key Code |
modifiers |
Các giá trị hợp lệ: WITH_ALT , WITH_CTRL , WITH_COMMAND , WITH_SHIFT |
Ví dụ
| (async function(){
await SendKeyDown (K_KEYA); //keydown A
})();
|
SendKeyUp
Giả lập sự kiện keyup.
Cú pháp
await SendKeyUp (keyCode, modifiers)
Chi tiết
Tham số |
Mô tả |
keyCode |
Key Code |
modifiers |
Các giá trị hợp lệ: WITH_ALT , WITH_CTRL , WITH_COMMAND , WITH_SHIFT |
Ví dụ
| (async function(){
await SendKeyUp (K_KEYA); //keydown A
})();
|
SendKeyChar
Giả lập sự kiện keychar.
Cú pháp
await SendKeyChar (keyCode)
Chi tiết
Ví dụ
| (async function(){
await SendKeyChar (K_KEYA);
await SendKeyChar ("a");
})();
|
Typing
Giả lập gõ văn bản.
Cú pháp
await Typing (text[, speed1, speed2])
Chi tiết
Tham số |
Mô tả |
text |
Văn bản cần gõ. |
speed1 - speed2 |
Khoảng thời gian delay giữa các lần gõ để trông giống người (in miliseconds). |
Ví dụ
| (async function(){
//Gõ nhanh
await Typing ("Xin chào Bịp Profile");
//Gõ chậm như người
await Typing ("Xin chào Bịp Profile", 300, 500);
})();
|
Tương tác chuột
Tất cả các hàm click dưới đây đều giả lập một đường di chuột di chuyển (mousemove) đến mục tiêu trước khi thực hiện click!
ClickByCoordinates
Click vào một tọa độ chỉ định trên trang web.
Cú pháp
await ClickByCoordinates (x1, y1, x2, y2, nClick=1)
Chi tiết
Tham số |
Mô tả |
x1 |
Tọa độ x góc trái trên |
y1 |
Tọa độ y góc trái trên |
x2 |
Tọa độ x góc phải dưới |
y2 |
Tọa độ y góc phải dưới |
nClick |
Số lượt click, mặc định là 1 |

Ví dụ
| (async function(){
await ClickByCoordinates(100, 100, 200, 200);
await ClickByCoordinates(100, 100, 200, 200, 2);//double click
})();
|
Tip
Bạn có thể dễ dàng tạo lệnh này bằng cách sử dụng May Extension!
ClickBySelector
Click và một phần tử trên trang web theo CSS selector.
Cú pháp
await ClickBySelector (selector, index=0, nClick = 1, frameSearch="", frameSearchType="")
Chi tiết
Tham số |
Mô tả |
selector |
Một CSS selector. |
index |
Thứ tự phần tử sẽ sử dụng nếu css selector khớp nhiều hơn một phần tử. 0 là phần tử đầu tiên, hoặc nhập random để chọn ngẫu nhiên một phần tử. |
nClick |
Số click, mặc định là 1 |
frameSearch |
Nếu phần tử nằm trong một thẻ iframe, bạn cần xác định frame đó dựa thuộc tính src hoặc một đường dẫn đến frame đó. |
frameSearchType |
Kiểu xác định frame, gồm có các giá trị: "src-starts" , "src-ends" , "src-equals" , "src-contains" , "src-regex" , "frame-path" , mặc định là "src-contains" . |
Ví dụ
| (async function(){
//click vào một liên kết có chứa bipprofile.io
await ClickBySelector("a[href*='bipprofile.io']");
//click vào một button với id là submit, bên trong một iframe có thuộc tính src bắt đầu với https://bipprofile.io
await ClickBySelector("button#submit", 0, 1, "https://bipprofile.io", "src-starts");
//click vào một button với id là submit, bên trong một iframe có thuộc tính src chính xác bằng https://bipprofile.io/contact.html
await ClickBySelector("button#submit", 0, 1, "https://bipprofile.io/contact.html", "src-equals");
//click vào một button với id là submit, bên trong một iframe có thuộc tính src kết thúc bằng /contact.html
await ClickBySelector("button#submit", 0, 1, "/contact.html", "src-ends");
//click vào một button với id là submit, bên trong một iframe có thuộc tính src có chứa bipprofile.io
await ClickBySelector("button#submit", 0, 1, "bipprofile.io", "src-contains");
//click vào một button với id là submit, bên trong một iframe có thuộc tính src khớp regex bip[a-z]+\.io
await ClickBySelector("button#submit", 0, 1, "bip[a-z]+\.io", "src-regex");
//click vào một button với id là submit, bên trong iframe đầu tiên trong site
await ClickBySelector("button#submit", 0, 1, "0", "frame-path");
//click vào một button với id là submit, bên trong iframe thứ 2 của iframe đầu tiên trong site
await ClickBySelector("button#submit", 0, 1, "0>1", "frame-path");
})();
|
Tip
Bạn có thể dễ dàng tạo lệnh này bằng cách sử dụng May Extension!
ClickById
Click vào một phần tử theo ID.
Cú pháp
await ClickById (id, nClick=1, frameSearch="", frameSearchType="")
Chi tiết
Ví dụ
| (async function(){
await ClickById("load-more-button");
//same with
//await ClickBySelector("#load-more-button");
})();
|
ClickByTag
Click vào một phần tử theo tag.
Cú pháp
await ClickByTag (tag, index, nClick=1, frameSearch="", frameSearchType="");
Chi tiết
Ví dụ
| (async function(){
await ClickByTag("iframe"); //click thẻ iframe đầu tiên
await ClickByTag("iframe", 1); //click thẻ iframe thứ 2
await ClickByTag("div", "random", 2); //double click ngẫu nhiên một thẻ div
})();
|
ClickByClass
Click vào một phần tử theo class.
Cú pháp
await ClickByClass (class, index, nClick=1, frameSearch="", frameSearchType="");
Chi tiết
Ví dụ
| (async function(){
await ClickByClass("skip-button"); //click phần tử đầu tiên có class là "skip-button"
await ClickByClass("skip-button", 1); //click phần tử thứ 2 có class là "skip-button"
await ClickByClass("skip-button", "random"); //click ngẫu nhiên một phần tử có class là "skip-button"
})();
|
ClickByXpath
Click vào một phần tử theo xpath.
Cú pháp
await ClickByXpath (xpath, nClick=1, frameSearch="", frameSearchType="");
Chi tiết
Ví dụ
| (async function(){
await ClickByXpath("/html/body/div/div[1]/div/ul/li[6]/a/div[1]/span");
await ClickByXpath(GenerateXpath("a", "href", "https://bipprofile.io%"));
})();
|
ClickRandomLink
Click ngẫu nhiên một liên kết trên site.
Cú pháp
await ClickRandomLink (frameSearch="", frameSearchType="");
Chi tiết
Ví dụ
| (async function(){
await ClickRandomLink();
//same with
//await ClickByTag("a", "random");
//await ClickBySelector("a", "random");
})();
|
ClickRandomInternalLink
Click ngẫu nhiên một internal link trên site.
Cú pháp
await ClickRandomInternalLink (frameSearch="", frameSearchType="");
Chi tiết
Ví dụ
| (async function(){
await ClickRandomInternalLink();
})();
|
ClickRandomExternalLink
Click ngẫu nhiên một external link trên site.
Cú pháp
await ClickRandomExternalLink (frameSearch="", frameSearchType="");
Chi tiết
Ví dụ
| (async function(){
await ClickRandomExternalLink();
})();
|
SendMouseMove
Giả lập mouse move.
Cú pháp
await SendMouseMove (x, y);
Chi tiết
Tham số |
Mô tả |
x |
Tọa độ x. |
y |
Tọa độ y. |
Ví dụ
| (async function(){
await SendMouseMove (100, 200);
})();
|
SendMouseWheel
Giả lập cuộn chuột bằng con lăn.
Cú pháp
await SendMouseWheel (deltaX, deltaY);
Chi tiết
Tham số |
Mô tả |
deltaX |
Mức cuộn ngang |
deltaY |
Mức cuộn dọc |
Ví dụ
| (async function(){
await SendMouseWheel(0, -120); //xuống 120px
await Delay(3000);
await SendMouseWheel(0, 120); //rồi lại phải lên 120px
})();
|
MoveMouse
Giả lập di chuyển chuột giữa hai điểm.
Cú pháp
await MoveMouse (startPoint, endPoint, modifiers = 0, button = "none");
Chi tiết
Tham số |
Mô tả |
startPoint |
Tọa độ điểm đầu. |
endPoint |
Tọa độ điểm cuối. |
modifiers |
Các phím modifier: WITH_ALT, WITH_CTRL, WITH_COMMAND, WITH_SHIFT. |
button |
Nút chuột được nhấn: none , left , right , middle . |
Ví dụ
| (async function(){
await WaitForLoading();
await MoveMouse({X: 0, Y: 0}, {X: 300, Y: 300});
await MoveMouse({X: 300, Y: 300}, {X: 0, Y: 300});
await MoveMouse({X: 0, Y: 300}, {X: 300, Y: 0});
await MoveMouse({X: 300, Y: 0}, {X: 0, Y: 0});
})();
|
MoveMouseToArea
Di chuyển chuột tới một ví trị ngẫu nhiên trong vùng được chọn.
Cú pháp
await MoveMouseToArea (x1, y1, x2, y2, modifiers = 0, button = "none");
Chi tiết
Tham số |
Mô tả |
x1 |
Tọa độ x góc trái bên trên |
y1 |
Tọa độ y góc trái bên trên |
x2 |
Tọa độ x góc phải bên dưới |
y2 |
Tọa độ y góc phải bên dưới |
modifiers |
Xem MoveMouse |
button |
Xem MoveMouse |

Ví dụ
| (async function(){
await WaitForLoading();
await MoveMouseToArea(0, 0, 300, 300);
await MoveMouseToArea(0, 0, 300, 300);
})();
|
MoveMouseToAnyWhere
Di chuyển chuột đến một vị trí ngẫu nhiên trong site.
Cú pháp
await MoveMouseToAnyWhere (modifiers = 0, button = "none");
Chi tiết
Ví dụ
| (async function(){
await WaitForLoading();
await MoveMouseToAnyWhere();
await MoveMouseToAnyWhere();
})();
|
MoveMouseToElmBySelector
Di chuyển chuột tới một phần tử được xác định bằng CSS selector.
Cú pháp
await MoveMouseToElmBySelector (selector, index=0, frameSearch="", frameSearchType="", modifiers = 0, button = "none");
Chi tiết
Ví dụ
| (async function(){
//test với link https://google.com/
await WaitForLoading();
//move mouse to the search text box
await MoveMouseToElmBySelector ('textarea[title="Search"]');
})();
|
DragMouse
Thao tác kéo thả (drag) giữa hai điểm.
Cú pháp
await DragMouse (startPoint, endPoint, speed = 0.5, button = "left", modifiers = 0);
Chi tiết
Tham số |
Mô tả |
startPoint |
Tọa độ điểm đầu. |
endPoint |
Tọa độ điểm cuối. |
speed |
Tốc độ kéo thả. |
button |
Xem MoveMouse |
modifiers |
Xem MoveMouse |
Ví dụ
| (async function(){
//Drag từ điểm 0,0 đến 300,300
await DragMouse({X: 0, Y: 0}, {X: 300, Y: 300});
//Drag từ điểm 0,0 đến 300,300 với tốc độ chậm hơn
await DragMouse({X: 0, Y: 0}, {X: 300, Y: 300}, 10);
//Drag từ điểm 0,0 đến 300,300 với tốc độ chậm hơn bằng chuột phải
await DragMouse({X: 0, Y: 0}, {X: 300, Y: 300}, 10, "right");
//Drag từ điểm 0,0 đến 300,300 với tốc độ chậm hơn bằng chuột phải có bấm giữ phím Ctrl + Shift
await DragMouse({X: 0, Y: 0}, {X: 300, Y: 300}, 10, "right", WITH_CTRL | WITH_SHIFT);
})();
|
Tương tác khác
Navigate
Điều hướng trình duyệt đến một URL.
Cú pháp
await Navigate (url, referrer);
Chi tiết
Tham số |
Mô tả |
url |
Link trang web cần tải. |
referrer |
Giả mạo link referrer (tùy chọn). |
Ví dụ
| (async function(){
await Navigate("https://google.com/");
await WaitForLoading();
await Navigate("https://bipprofile.io/", "https://google.com/");
})();
|
CapturePage
Chụp ảnh phần đang hiển thị trên trình duyệt của trang web và trả về dữ liệu dạng mã hóa base64.
Cú pháp
await CapturePage (quality);
Chi tiết
Tham số |
Mô tả |
quality |
Chất lượng ảnh, từ 0-100, mặc định là 80. |
Ví dụ
| (async function(){
const imgBase64 = await CapturePage();
const betterImgBase64 = await CapturePage(100);
})();
|
CaptureArea
Chụp ảnh một phần đang hiển thị của trang web và trả về dữ liệu dạng mã hóa base64.
Cú pháp
await CaptureArea (x1, y1, x2, y2, quality);
Chi tiết
Tham số |
Mô tả |
x1 |
Tọa độ x góc trái bên trên |
y1 |
Tọa độ y góc trái bên trên |
x2 |
Tọa độ x góc phải bên dưới |
y2 |
Tọa độ y góc phải bên dưới |
quality |
Chất lượng ảnh, từ 0-100, mặc định là 80. |

Ví dụ
| (async function(){
const imgBase64 = await CaptureArea(0, 0, 300, 500);
const betterImgBase64 = await CaptureArea(0, 0, 300, 500, 100);
})();
|
Tip
Bạn có thể dễ dàng tạo lệnh này bằng cách sử dụng May Extension!
CaptureElement
Chụp ảnh một phần tử hiển thị trên trang web và trả về dữ liệu dạng mã hóa base64.
Cú pháp
await CaptureElement (selector, quality, frameSearch, frameSearchType);
Chi tiết
Ví dụ
| (async function(){
const captcha = await CaptureElement("#image_captcha");
const avatar = await CaptureElement("#profile img.avatar");
})();
|
GetElementPosBySelector
Lấy tọa độ của một phần tử bằng CSS selector.
Cú pháp
await GetElementPosBySelector (selector, frameSearch, frameSearchType);
Chi tiết
Ví dụ
| (async function(){
const pos = await GetElementPosBySelector("#image_captcha");
//eg: {x1: 100, y1: 100, x2: 200, y2: 200}
})();
|
Tip
Bạn có thể dễ dàng tạo lệnh này bằng cách sử dụng May Extension!
SetFilesToElement
Đặt file được chọn cho các thẻ file input
, thường dùng khi bạn cần upload.
Cú pháp
await SetFilesToElement (selector, files, frameSearch, frameSearchType);
Chi tiết
Ví dụ
| (async function(){
//test trên link https://ps.uci.edu/~franklin/doc/file_upload.html
await SetFilesToElement("html>body>form>input", ["D:\\test_file.txt"]);
})();
|
Tip
Bạn có thể dễ dàng tạo lệnh này bằng cách sử dụng May Extension!
Cuộn trang web đến vị trí xác định.
Cú pháp
await ScrollTo (x, y, smooth = false);
Chi tiết
Tham số |
Mô tả |
x |
tọa độ x. |
y |
tọa độ y. |
smooth |
Cuộn từ từ hay tốc biến. |
Ví dụ
| (async function(){
await ScrollTo(0, 1000);
await ScrollTo(0, 0, true);
})();
|
ResizeTo
Thay đổi kích thước trình duyệt.
Cú pháp
await ResizeTo (width, height);
Chi tiết
Tham số |
Mô tả |
width |
Chiều rộng. |
height |
Chiều cao. |
Ví dụ
| (async function(){
await ResizeTo (600, 500);
})();
|
MoveTo
Di chuyển cửa số trình duyệt đến một vị trí xác định trên màn hình.
Cú pháp
Chi tiết
Tham số |
Mô tả |
x |
Tọa độ x. |
y |
Tọa độ y. |
Ví dụ
| (async function(){
await MoveTo (100, 150);
})();
|
TabFocus
Kích hoạt một tab hoặc popup khi trình duyệt mở nhiều hơn một tab. Sau khi gọi hàm TabFocus, tất các hàm sau đó
sẽ được chạy trên tab vừa được focus.
Cú pháp
Chi tiết
Tham số |
Mô tả |
target |
Có thể là số thứ tự của tab (bắt đầu từ 1) hoặc là một mẫu text xuất hiện trong URL. |
Ví dụ
| (async function(){
await WaitForLoading();
await EvalScript('open("https://google.com")');
await EvalScript('open("https://facebook.com")');
await Delay(2000);
await EvalScript('document.write("this is main tab")');
await TabFocus(2); //focus to the 2nd tab
await Delay(1000);
await EvalScript('document.write("this 2nd tab")');
await TabFocus("facebook.com"); //focus to the tab which has url contains "facebook.com"
await Delay(1000);
await EvalScript('document.write("this facebook tab")');
//focus to the first tab that does not contains facebook.com
await TabFocus("!facebook.com");
})();
|
EvalScript
Thực thi mã javascript trên trang web, kết quả trả về là các dữ liệu nguyên thủy (number, string) hoặc các object đơn giản.
Cú pháp
await EvalScript (jsCode, frameSearch="", frameSearchType="");
Chi tiết
Ví dụ
| (async function(){
await WaitForLoading();
const r1 = await EvalScript ('"bip" + "profile"');
//r1 = {"result":"bipprofile"}
const r2 = await EvalScript ('null[0]');
//r2 = {"error":"TypeError: Cannot read properties of null (reading '0')"}
})();
|
EvalScriptWithPromise
Tương tự như EvalScript nhưng nếu đoạn mã bạn cần thực thì là một async function hoặc function trả về là một Promise
thì hãy sử dụng hàm này.
Cú pháp
await EvalScriptWithPromise (jsCode, frameSearch="", frameSearchType="");
Chi tiết
Ví dụ
| (async function(){
await WaitForLoading();
const r1 = await EvalScript ('"bip" + "profile"');
//r1 = {"result":"bipprofile"}
const r2 = await EvalScriptWithPromise ('Promise.resolve("bipprofile")');
//r2 = {"result":"bipprofile"}
const r3 = await EvalScriptWithPromise ('Promise.noSuchFunc("bipprofile")');
//r3 = {"error":"TypeError: Promise.noSuchFunc is not a function"}
})();
|
SetBySelector
Đặt giá trị cho một thuộc tính của phần tử theo ID.
Cú pháp
await SetBySelector (selector, attr, value, index, frameSearch="", frameSearchType="");
Chi tiết
Tham số |
Mô tả |
selector |
ID của phần tử. |
attr |
Thuộc tính cần đặt giá trị. |
value |
Giá trị. |
index |
Thứ tự phần tử sẽ sử dụng nếu css selector khớp nhiều hơn một phần tử. 0 là phần tử đầu tiên, hoặc nhập random để chọn ngẫu nhiên, all đế áp dựng cho tất cả. |
frameSearch |
Nếu phần tử nằm trong một thẻ iframe, bạn cần xác định frame đó. |
frameSearchType |
Kiểu xác định frame, gồm có các giá trị: "src-starts" , "src-ends" , "src-equals" , "src-contains" , "src-regex" , "frame-path" , mặc định là "src-contains" . |
Ví dụ
| (async function(){
await WaitForLoading();
await SetBySelector("#email", "value", "[email protected]");
await SetBySelector(".address", "value", "mars", "all");
//đặt giá trị là "[email protected]" cho thẻ input có id là email, bên trong một iframe có thuộc tính src bắt đầu với https://bipprofile.io
await SetBySelector("input#email", "value", "[email protected]", 0, "https://bipprofile.io", "src-starts");
//đặt giá trị là "[email protected]" cho thẻ input có id là email, bên trong một iframe có thuộc tính src chính xác bằng https://bipprofile.io/contact.html
await SetBySelector("input#email", "value", "[email protected]", 0, "https://bipprofile.io/contact.html", "src-equals");
//đặt giá trị là "[email protected]" cho thẻ input có id là email, bên trong một iframe có thuộc tính src kết thúc bằng /contact.html
await SetBySelector("input#email", "value", "[email protected]", 0, "/contact.html", "src-ends");
//đặt giá trị là "[email protected]" cho thẻ input có id là email, bên trong một iframe có thuộc tính src có chứa bipprofile.io
await SetBySelector("input#email", "value", "[email protected]", 0, "bipprofile.io", "src-contains");
//đặt giá trị là "[email protected]" cho thẻ input có id là email, bên trong một iframe có thuộc tính src khớp regex bip[a-z]+\.io
await SetBySelector("input#email", "value", "[email protected]", 0, "bip[a-z]+\.io", "src-regex");
//đặt giá trị là "[email protected]" cho thẻ input có id là email, bên trong iframe đầu tiên trong site
await SetBySelector("input#email", "value", "[email protected]", 0, "0", "frame-path");
//đặt giá trị là "[email protected]" cho thẻ input có id là email, bên trong iframe thứ 2 của iframe đầu tiên trong site
await SetBySelector("input#email", "value", "[email protected]", 0, "0>1", "frame-path");
})();
|
SetById
Đặt giá trị cho một thuộc tính của phần tử theo ID.
Cú pháp
await SetById (id, attr, value, frameSearch="", frameSearchType="");
Chi tiết
Tham số |
Mô tả |
id |
ID của phần tử. |
attr |
Thuộc tính cần đặt giá trị. |
value |
Giá trị. |
frameSearch |
Xem SetBySelector |
frameSearchType |
Xem SetBySelector |
Ví dụ
| (async function(){
await WaitForLoading();
await SetById("email", "value", "[email protected]");
})();
|
SetByClass
Đặt giá trị cho một thuộc tính của phần tử theo class.
Cú pháp
await SetByClass (class, attr, value, index, frameSearch="", frameSearchType="");
Chi tiết
Ví dụ
| (async function(){
await WaitForLoading();
await SetBySelector("#email", "value", "[email protected]");
await SetBySelector(".address", "value", "mars", "all");
})();
|
SetByTag
Đặt giá trị cho một thuộc tính của phần tử theo tên tag.
Cú pháp
await SetByTag (tag, attr, value, index, frameSearch="", frameSearchType="");
Chi tiết
Tham số |
Mô tả |
tag |
Tag name of the element. |
attr |
The attribute you want to set. |
value |
The value you want to set. |
index |
Xem SetBySelector |
frameSearch |
Xem SetBySelector |
frameSearchType |
Xem SetBySelector |
Ví dụ
| (async function(){
await WaitForLoading();
await SetByTag("input", "value", "text value");
await SetByTag("input", "value", "text value", 2);
await SetByTag("input", "value", "text value", "random");
await SetByTag("input", "value", "text value", "all");
})();
|
SetByXpath
Đặt giá trị cho một thuộc tính của phần tử theo tên xpath.
Cú pháp
await SetByXpath (xpath, attr, value, frameSearch="", frameSearchType="");
Chi tiết
Tham số |
Mô tả |
xpath |
Xpath of the element. |
attr |
The attribute you want to set. |
value |
The value you want to set. |
frameSearch |
Xem SetBySelector |
frameSearchType |
Xem SetBySelector |
Ví dụ
| (async function(){
await WaitForLoading();
await SetByXpath ('//input[@type="email"]', 'value', '[email protected]');
})();
|
Xử lý captcha
_2CaptchaSolve
Giải captcha bằng dịch vụ của 2Captcha.
Nếu bạn sử dụng một dịch vụ khác tương tự hoặc có khả năng tương thích với 2captcha, bạn có thể
ghi đè API máy chủ vào biến _2CaptchaServer
.
Cú pháp
await _2CaptchaSolve (params, timeout);
Chi tiết
Tham số |
Mô tả |
params |
Các tham số theo tài liệu của 2Captcha. |
timeout |
Thời gian chờ tối đa tính bằng giây. |
Ví dụ
| (async function(){
//_2CaptchaServer = "http://a-similar-2captcha.com";
const captBase64 = await CaptureElement("#CAPTCHA_IMAGE");
const result = await _2CaptchaSolve({
'key' : '2CAPTCHA_API_KEY', //replace with your 2Captcha API Key
'method' : 'base64',
'json' : 1,
'body': captBase64
});
Log("Result is:", result.request);
//Example Result: {status:1, request: VMXKDG, captchaId: 1241352612}
})();
|
_2CaptchaReportBad
Nếu bạn tin rằng captcha giải không đúng, bạn có thể báo cáo để được hoàn tiền, tuy nhiên đừng lạm dụng vì
nó có thể vi phạm chính sách của bên cung cấp nếu bạn cố tính báo cáo sai.
Cú pháp
await _2CaptchaReportBad (key, captchaId);
Chi tiết
Ví dụ
| (async function(){
//_2CaptchaServer = "http://a-similar-2captcha.com";
const captBase64 = await CaptureElement("#CAPTCHA_IMAGE");
const result = await _2CaptchaSolve({
'key' : '2CAPTCHA_API_KEY', //replace with your 2Captcha API Key
'method' : 'base64',
'json' : 1,
'body': captBase64
});
//submit captcha và bị xịt...
await _2CaptchaReportBad('2CAPTCHA_API_KEY', result.captchaId);
})();
|
ACSolve
Giải captcha bằng dịch vụ của anti-captcha.
Nếu bạn sử dụng một dịch vụ khác tương tự hoặc có khả năng tương thích với anti-captcha, bạn có thể
ghi đè API máy chủ vào biến AntiCaptchaServer
.
Cú pháp
await ACSolve (params, timeout);
Chi tiết
Tham số |
Mô tả |
params |
tham số theo tài liệu của anti-captcha. |
timeout |
Timeout in seconds. |
Ví dụ
| (async function(){
//AntiCaptchaServer = "http://a-similar-anti-captcha.com";
//Giải image captcha
const captBase64 = await CaptureElement("#CAPTCHA_IMAGE");
const result = await ACSolve({
"clientKey":"Your anti-captcha API Key",
"task":
{
"type":"ImageToTextTask",
"body":captBase64,
"phrase":false,
"case":false,
"numeric":false,
"math":0,
"minLength":0,
"maxLength":0
}
}, 150);
/* Example result
{
"taskId":1234567,
"errorId":0,
"status":"ready",
"solution":
{
"text":"deditur",
"url":"http:\/\/61.39.233.233\/1\/147220556452507.jpg"
},
"cost":"0.000700",
"ip":"46.98.54.221",
"createTime":1472205564,
"endTime":1472205570,
"solveCount":"0"
}
*/
//Giải Google ReCAPTCHA
const result2 = await ACSolve({
"clientKey": "Your anti-captcha API Key",
"task":
{
"type":"NoCaptchaTaskProxyless",
"websiteURL":"https://bipprofile.com",
"websiteKey":"6LdPp08UAAAAADi4dE6frVDXCv2CgESTpcscb_LS"
}
}, 600);
})();
|
ACReportIncorrectImage
Nếu bạn tin rằng captcha giải không đúng, bạn có thể báo cáo để được hoàn tiền, tuy nhiên đừng lạm dụng vì
nó có thể vi phạm chính sách của bên cung cấp nếu bạn cố tính báo cáo sai.
Cú pháp
await ACReportIncorrectImage(key, taskId);
Chi tiết
Ví dụ
| (async function(){
//AntiCaptchaServer = "http://a-similar-anti-captcha.com";
const captBase64 = await CaptureElement("#CAPTCHA_IMAGE");
const result = await ACSolve({
"clientKey":"Your anti-captcha API Key",
"task":
{
"type":"ImageToTextTask",
"body":captBase64,
"phrase":false,
"case":false,
"numeric":false,
"math":0,
"minLength":0,
"maxLength":0
}
}, 150);
//do something | submit captcha...
if("bị xịt")
{
ACReportIncorrectImage("Your anti-captcha API Key", result.taskId);
}
})();
|
ACReportIncorrectRecaptcha
Tương tự như ACReportIncorrectImage nhưng sử dụng cho với ReCAPTCHA.
SolveRecaptcha
Đây là hàm giải ReCAPTCHA, được xây dựng dựa trên _2CaptchaSolve và ACSolve.
Nếu captcha được giải thành công, bạn có thể tiếp tục với các hành động tiếp theo như click nút Submit, Continue...
Ngoài ra bạn có thể dùng hàm TryToCallRecaptchaCallBack để kích hoạt hàm callback (nếu có) trên site khi captcha đã được giải.
Cú pháp
await SolveRecaptcha (service, apiKey, timeout = 300, overrideApiServer = null);
Chi tiết
Tham số |
Mô tả |
service |
Giá trị hợp lệ: 2captcha or anti-captcha |
apiKey |
API Key của 2captcha hoặc anti-captcha |
timeout |
Thời gian chờ tối đa tính bằng giây |
overrideApiServer |
Ghi đè API endpoint gốc nếu bạn dùng một dịch vụ tương tự |
Ví dụ
| (async function(){
//test on https://www.google.com/recaptcha/api2/demo
await WaitForLoading ();
const result = await SolveRecaptcha("2captcha", "YOUR_API_KEY");
//const result = await SolveRecaptcha("anti-captcha", "YOUR_API_KEY");
await ClickBySelector('#recaptcha-demo-submit'); //click submit button
//await TryToCallRecaptchaCallBack(result.request);
/*
Example of result value:
2captcha: {"status":1,"request":"THE_RESPONSE_RESULT","captchaId":"71006265012"}
anti-captcha:
{
"errorId":0,
"status":"ready",
"solution":{
"gRecaptchaResponse":"THE_RESPONSE_RESULT",
"cookies":{
"_GRECAPTCHA":"COOKIES..."
}
},
"cost":"0.00200",
"ip":"1.2.3.4",
"createTime":1658115990,
"endTime":1658116074,
"solveCount":0,
"taskId":685667638
}
*/
})();
|
SolvehCaptcha
Tương tự như SolveRecaptcha nhưng sử dụng cho với hCaptcha.
Cú pháp
await SolvehCaptcha (service, apiKey, timeout = 300, overrideApiServer = null);
Chi tiết
Tham số |
Mô tả |
service |
Giá trị hợp lệ: 2captcha or anti-captcha |
apiKey |
API Key của 2captcha hoặc anti-captcha |
timeout |
Thời gian chờ tối đa tính bằng giây |
overrideApiServer |
Ghi đè API endpoint gốc nếu bạn dùng một dịch vụ tương tự |
Ví dụ
| (async function(){
//test on https://accounts.hcaptcha.com/demo
await WaitForLoading ();
const result = await SolvehCaptcha("2captcha", "YOUR_API_KEY");
//const result = await SolvehCaptcha("anti-captcha", "YOUR_API_KEY");
await ClickById('hcaptcha-demo-submit'); //click submit button
})()
|
SolveImageCaptcha
Tương tự như SolveRecaptcha nhưng sử dụng cho các loại captcha ảnh.
Cú pháp
await SolveImageCaptcha (imgSelector, resultSelector, service, apiKey, timeout = 300, overrideApiServer = null);
Chi tiết
Tham số |
Mô tả |
imgSelector |
CSS selector của ảnh captcha. |
resultSelector |
CSS selector ô text để nhập kết quả. |
service |
Giá trị hợp lệ: 2captcha or anti-captcha |
apiKey |
API Key của 2captcha hoặc anti-captcha |
timeout |
Thời gian chờ tối đa tính bằng giây |
overrideApiServer |
Ghi đè API endpoint gốc nếu bạn dùng một dịch vụ tương tự |
Ví dụ
| (async function(){
//test on https://captcha.com/demos/features/captcha-demo.aspx
await WaitForLoading ();
const result = await SolveImageCaptcha("#demoCaptcha_CaptchaImage", "#captchaCode", "2captcha", "YOUR_API_KEY")
// const result = await SolveImageCaptcha("#demoCaptcha_CaptchaImage", "#captchaCode", "anti-captcha", "YOUR_API_KEY")
await ClickBySelector ("#validateCaptchaButton");
/*
Example of result value:
2captcha: {"status":1,"request":"bw8t","captchaId":"71014870176"}
anti-captcha:
{
"errorId":0,
"status":"ready",
"solution":{
"text":"BW8T",
"url":"http://209.212.146.170/80/165820017899645.jpg"
},
"cost":"0.00070",
"ip":"1.2.3.4",
"createTime":1658200178,
"endTime":1658200181,
"solveCount":0,
"taskId":701277528
}
*/
})()
|
TryToCallRecaptchaCallBack
Cố gắng tìm và thực thi hàm callback (nếu có) sau khi giải xong ReCAPTCHA.
Cú pháp
TryToCallRecaptchaCallBack (result);
Chi tiết
Tham số |
Mô tả |
result |
Kết quả giải ReCAPTCHA. |
Ví dụ
| (async function(){
const result = await ACSolve({
"clientKey": "Your anti-captcha API Key",
"task":
{
"type":"NoCaptchaTaskProxyless",
"websiteURL":"https://bipprofile.io",
"websiteKey":"6LdPp08UAAAAADi4dE6frVDXCv2CgESTpcscb_LS"
}
}, 600);
await TryToCallRecaptchaCallBack(result.solution.gRecaptchaResponse);
})()
|
Xử lý file
GetCurrentDir
Lấy thư mục gốc của tool
Cú pháp
Ví dụ
| (async function(){
const root = GetCurrentDir();
Log("Tool đang chạy trong:", root);
})();
|
GetHomeDir
Lấy thư mục home của user trên máy tính.
Cú pháp
Ví dụ
| (async function(){
const home = GetHomeDir();
Log("Home dir:", home);
})();
|
GetDownloadDir
Lấy thư mục lưu các tệp download về của profile.
Cú pháp
Ví dụ
| (async function(){
const dl = GetDownloadDir();
Log("Download dir:", dl);
})();
|
ReadFileAsString
Đọc file và trả về dữ liệu dạng text.
Cú pháp
Chi tiết
Tham số |
Mô tả |
path |
Đường dẫn đến file. |
Kết quả trả về
Một object với các thuộc tính được minh họa như sau
{result: "FILE_CONTENT"}
hoặc
{error: "ERROR_MESSAGE"}
Ví dụ
| (async function(){
const read = ReadFileAsString("D:\\my-proxies.txt");
Log("Result is:", read.result);
//{result: "1.1.1.1:6969"}
//{error: "file does not exists"}
})();
|
ReadFileAsLines
Đọc file text và trả về dữ liệu các dòng dưới dạng mảng (array).
Cú pháp
Chi tiết
Tham số |
Mô tả |
path |
Đường dẫn đến file. |
Kết quả trả về
Một object với các thuộc tính được minh họa như sau
{result: STRING_ARRAY}
hoặc
{error: "ERROR_MESSAGE"}
Ví dụ
| (async function(){
const read = ReadFileAsLines("D:\\my-proxies.txt");
Log("Result is:", read.result);
//{result: ["1.1.1.1:6969", "1.1.1.1:6970"]}
//{error: "file does not exists"}
})();
|
ReadFileAsBytes
Đọc file và trả về dữ liệu dạng binary.
Cú pháp
Chi tiết
Tham số |
Mô tả |
path |
Đường dẫn đến file. |
Kết quả trả về
Một object với các thuộc tính được minh họa như sau
{result: ArrayBuffer}
hoặc
{error: "ERROR_MESSAGE"}
Ví dụ
| (async function(){
const read = ReadFileAsBytes("D:\\my-proxies.txt");
Log("Result is:", read.result);
//{result: ArrayBuffer}
//{error: "file does not exists"}
})();
|
WriteFile
Ghi dữ liệu vào file.
Cú pháp
WriteFile (path, data, append);
Chi tiết
Tham số |
Mô tả |
path |
Đường dẫn đến file. |
data |
Dữ liệu text hoặc binary. |
append |
Ghi nối hoặc ghi đè dữ liệu, true hoặc false . |
Kết quả trả về
Một object với các thuộc tính được minh họa như sau
{result: true}
hoặc
{error: "ERROR_MESSAGE"}
Ví dụ
| (async function(){
WriteFile("D:\\bipprofile.txt", "vi tuong lai");
WriteFile("D:\\bipprofile.txt", " MMO Viet", true); //ghi nối thêm vào file
})();
|
TouchFile
Sờ soạng vào file.
Cú pháp
Chi tiết
Tham số |
Mô tả |
path |
Đường dẫn đến file. |
Kết quả trả về
Một object với các thuộc tính được minh họa như sau
{result: true}
hoặc
{error: "ERROR_MESSAGE"}
Ví dụ
| (async function(){
TouchFile("D:\\bipprofile.txt");
})();
|
PathExists
Kiểm tra một đường dẫn (file hoặc thư mục) có tồn tại hay không.
Cú pháp
Chi tiết
Tham số |
Mô tả |
path |
Đường dẫn. |
Ví dụ
| (async function(){
const exists = PathExists("D:\\bipprofile.txt");
if(exists) Log("File tồn tại");
else Log("File KHÔNG tồn tại");
})();
|
GetFileInfo
Lấy thông tin file.
Cú pháp
Chi tiết
Tham số |
Mô tả |
path |
Đường dẫn. |
Kết quả trả về
Một object với các thuộc tính được minh họa như sau
{
"result": {
"creationTime": 1724735412.946547,
"isDirectory": false,
"isSymbolicLink": false,
"lastAccessed": 1724735417.776545,
"lastModified": 1724735417.776545,
"size": 21
}
}
hoặc
{error: "ERROR_MESSAGE"}
Ví dụ
| (async function(){
const info = GetFileInfo("D:\\bipprofile.txt");
Log(info);
})();
|
CopyFileOrDir
Copy file hoặc thư mục.
Cú pháp
CopyFileOrDir (src, dst);
Chi tiết
Tham số |
Mô tả |
src |
Đường dẫn nguồn. |
dst |
Đường dẫn đích. |
Kết quả trả về
Một object với các thuộc tính được minh họa như sau
{result: true}
hoặc
{error: "ERROR_MESSAGE"}
Ví dụ
| (async function(){
CopyFileOrDir("D:\\bipprofile.txt", "D:\\bipprofile2.txt");
})();
|
MoveFileOrDir
Move file hoặc thư mục.
Cú pháp
MoveFileOrDir (src, dst);
Chi tiết
Tham số |
Mô tả |
src |
Đường dẫn nguồn. |
dst |
Đường dẫn đích. |
Kết quả trả về
Một object với các thuộc tính được minh họa như sau
{result: true}
hoặc
{error: "ERROR_MESSAGE"}
Ví dụ
| (async function(){
MoveFileOrDir("D:\\bipprofile.txt", "E:\\bipprofile.txt");
})();
|
DelFileOrDir
Xóa file hoặc thư mục.
Cú pháp
Chi tiết
Tham số |
Mô tả |
path |
Đường dẫn. |
Kết quả trả về
Một object với các thuộc tính được minh họa như sau
{result: true}
hoặc
{error: "ERROR_MESSAGE"}
Ví dụ
| (async function(){
DelFileOrDir("D:\\bipprofile.txt");
})();
|
MkDir
Tạo thư mục.
Cú pháp
Chi tiết
Tham số |
Mô tả |
path |
Đường dẫn. |
Kết quả trả về
Một object với các thuộc tính được minh họa như sau
{result: true}
hoặc
{error: "ERROR_MESSAGE"}
Ví dụ
| (async function(){
MkDir("D:\\new-folder");
})();
|
ReadDir
Trả về danh sách các file trong một thư mục.
Cú pháp
Chi tiết
Tham số |
Mô tả |
path |
Đường dẫn. |
Kết quả trả về
Một object với các thuộc tính được minh họa như sau
{
"result": [
"full_path_to_file1",
"full_path_to_file2",
"full_path_to_a_dir"
]
}
hoặc
{error: "ERROR_MESSAGE"}
Ví dụ
| (async function(){
const list = ReadDir("D:\\new-folder");
Log(list);
})();
|
Cookies
GetCookies
Lấy một số hoặc toàn bộ cookie theo bộ lọc. Nếu không chỉ định bộ lọc, toàn bộ cookie sẽ được trả về.
Cú pháp
await GetCookies (filter);
Chi tiết: filter là một object với các thuộc tính sau
Thuộc tính |
Mô tả |
domain |
Domain của cookie. |
url |
URL của cookie. |
path |
Đường dẫn trong URL của cookie. |
name |
Tên cookie. |
Ví dụ
| (async function(){
const allCookies = await GetCookies();
Log("all:", allCookies );
const googleCookies = await GetCookies({domain: "google.com"});
Log("google:", googleCookies);
})()
|
GetCookie
Lấy một cookie theo tên
Cú pháp
await GetCookie (name, url);
Chi tiết: filter là một object với các thuộc tính sau
Thuộc tính |
Mô tả |
name |
Tên cookie. |
url |
URL của cookie. |
Ví dụ
| (async function(){
const cookie = await GetCookie("PHPSESSID", "https://myhttpheader.com/");
Log(cookie );
/* Kết quả minh họa
{
"domain": "myhttpheader.com",
"hostOnly": true,
"httpOnly": false,
"name": "PHPSESSID",
"path": "/",
"sameSite": "unspecified",
"secure": true,
"session": true,
"storeId": "0",
"value": "d353f7f28ed8c7947749934e6633174b"
}
*/
})()
|
SetCookie
Set một cookie.
Cú pháp
await SetCookie (cookie);
Chi tiết: cookie là một object với các thuộc tính sau
Thuộc tính |
Mô tả |
name |
Tên cookie (Bắt buộc). |
value |
Giá trị cookie (Bắt buộc). |
url |
URL của cookie (Bắt buộc). |
expires |
Thời hạn của cookie theo Unix timestamp. |
path |
Đường dẫn trong URL của cookie. |
domain |
Domain của cookie. |
httpOnly |
HttpOnly. |
sameSite |
same-site status. |
secure |
Secure. |
Ví dụ
| (async function(){
await SetCookie({
"name": "BIP_PROFILE",
"value": "DINH_NOC_KICH_TRAN_BAY_PHAP_PHOI",
"url": "https://bipprofile.io",
"expires": Date.now()/1000 + 86400*3 //3 ngày
});
const cookie = await GetCookie("BIP_PROFILE", "https://bipprofile.io");
Log(cookie);
})()
|
DeleteCookies
Xóa một hoặc nhiều cookie.
Cú pháp
await DeleteCookies (name, domain, url);
Chi tiết: cookie là một object với các thuộc tính sau
Thuộc tính |
Mô tả |
name |
Tên cookie (Bắt buộc). |
url |
URL của cookie (Nếu không chỉ định, bắt buộc chỉ định domain ). |
domain |
Domain của cookie (Nếu không chỉ định, bắt buộc chỉ định url ). |
Ví dụ
| (async function(){
await SetCookie({
"name": "BIP_PROFILE",
"value": "DINH_NOC_KICH_TRAN_BAY_PHAP_PHOI",
"url": "https://bipprofile.io",
"expires": Date.now()/1000 + 86400*3 //3 ngày
});
Log("Trước khi xóa:", await GetCookie("BIP_PROFILE", "https://bipprofile.io"));
await DeleteCookies("BIP_PROFILE", "bipprofile.io");
Log("Sau khi xóa:", await GetCookie("BIP_PROFILE", "https://bipprofile.io")); //null
})()
|
ClearCookies
Xóa sạch cookie trình duyệt.
Cú pháp
Ví dụ
| (async function(){
Log("Trước khi xóa:", await GetCookies());
await ClearCookies();
Log("Sau khi xóa:", await GetCookies());
})()
|
Shell
LaunchProcess
Khởi chạy một process ngoài.
Cú pháp
await LaunchProcess (cmd, args, wait);
Chi tiết
Tham số |
Mô tả |
cmd |
Đường dẫn đến file thực thi. |
args |
Các tham số. |
wait |
Đợi đến khi process thoát, true hoặc false . |
Ví dụ
| (async function(){
await LaunchProcess("notepad");
const l = await LaunchProcess("cmd", ["/C", "echo", "Hello Bip Profile"], true);
Log(l);//Kết quả từ stdout và stdout
})()
|
Keycode Table
Sử dụng cho các hàm: SendKeyPress, SendKeyDown, SendKeyUp, SendKeyChar.
Click để hiện bảng mã
Tham số |
Mô tả |
K_BACKSPACE |
Backspace |
K_TAB |
Tab |
K_ENTER |
Enter |
K_SHIFT |
Shift |
K_CONTROL |
Control |
K_ALT |
Alt |
K_PAUSE |
Pause |
K_CAPSLOCK |
CapsLock |
K_ESCAPE |
Escape |
K_SPACE |
Space |
K_PAGEUP |
PageUp |
K_PAGEDOWN |
PageDown |
K_END |
End |
K_HOME |
Home |
K_ARROWLEFT |
ArrowLeft |
K_ARROWUP |
ArrowUp |
K_ARROWRIGHT |
ArrowRight |
K_ARROWDOWN |
ArrowDown |
K_PRINTSCREEN |
PrintScreen |
K_INSERT |
Insert |
K_DELETE |
Delete |
K_DIGIT0 |
Digit0 (0) |
K_DIGIT1 |
Digit1 (1) |
K_DIGIT2 |
Digit2 (2) |
K_DIGIT3 |
Digit3 (3) |
K_DIGIT4 |
Digit4 (4) |
K_DIGIT5 |
Digit5 (5) |
K_DIGIT6 |
Digit6 (6) |
K_DIGIT7 |
Digit7 (7) |
K_DIGIT8 |
Digit8 (8) |
K_DIGIT9 |
Digit9 (9) |
K_KEYA |
KeyA (A) |
K_KEYB |
KeyB (B) |
K_KEYC |
KeyC (C) |
K_KEYD |
KeyD (D) |
K_KEYE |
KeyE (E) |
K_KEYF |
KeyF (F) |
K_KEYG |
KeyG (G) |
K_KEYH |
KeyH (H) |
K_KEYI |
KeyI (I) |
K_KEYJ |
KeyJ (J) |
K_KEYK |
KeyK (K) |
K_KEYL |
KeyL (L) |
K_KEYM |
KeyM (M) |
K_KEYN |
KeyN (N) |
K_KEYO |
KeyO (O) |
K_KEYP |
KeyP (P) |
K_KEYQ |
KeyQ (Q) |
K_KEYR |
KeyR (R) |
K_KEYS |
KeyS (S) |
K_KEYT |
KeyT (T) |
K_KEYU |
KeyU (U) |
K_KEYV |
KeyV (V) |
K_KEYW |
KeyW (W) |
K_KEYX |
KeyX (X) |
K_KEYY |
KeyY (Y) |
K_KEYZ |
KeyZ (Z) |
K_METALEFT |
MetaLeft (Meta) |
K_METARIGHT |
MetaRight (Meta) |
K_CONTEXTMENU |
ContextMenu |
K_NUMPAD0 |
Numpad0 (0) |
K_NUMPAD1 |
Numpad1 (1) |
K_NUMPAD2 |
Numpad2 (2) |
K_NUMPAD3 |
Numpad3 (3) |
K_NUMPAD4 |
Numpad4 (4) |
K_NUMPAD5 |
Numpad5 (5) |
K_NUMPAD6 |
Numpad6 (6) |
K_NUMPAD7 |
Numpad7 (7) |
K_NUMPAD8 |
Numpad8 (8) |
K_NUMPAD9 |
Numpad9 (9) |
K_NUMPADMULTIPLY |
NumpadMultiply (*) |
K_NUMPADADD |
NumpadAdd (+) |
K_NUMPADSUBTRACT |
NumpadSubtract (-) |
K_NUMPADDECIMAL |
NumpadDecimal (.) |
K_NUMPADDIVIDE |
NumpadDivide (/) |
K_F1 |
F1 |
K_F2 |
F2 |
K_F3 |
F3 |
K_F4 |
F4 |
K_F5 |
F5 |
K_F6 |
F6 |
K_F7 |
F7 |
K_F8 |
F8 |
K_F9 |
F9 |
K_F10 |
F10 |
K_F11 |
F11 |
K_F12 |
F12 |
K_NUMLOCK |
NumLock |
K_SCROLLLOCK |
ScrollLock |
K_AUDIOVOLUMEMUTE |
AudioVolumeMute |
K_AUDIOVOLUMEDOWN |
AudioVolumeDown |
K_AUDIOVOLUMEUP |
AudioVolumeUp |
K_MEDIATRACKNEXT |
MediaTrackNext |
K_MEDIATRACKPREVIOUS |
MediaTrackPrevious |
K_MEDIASTOP |
MediaStop |
K_MEDIAPLAYPAUSE |
MediaPlayPause |
K_LAUNCHMAIL |
LaunchMail |
K_LAUNCHMEDIAPLAYER |
LaunchMediaPlayer |
K_LAUNCHAPPLICATION1 |
LaunchApplication1 |
K_LAUNCHAPPLICATION2 |
LaunchApplication2 |
K_SEMICOLON |
Semicolon (;) |
K_EQUAL |
Equal (=) |
K_COMMA |
Comma (,) |
K_MINUS |
Minus (-) |
K_PERIOD |
Period (.) |
K_SLASH |
Slash (/) |
K_BACKQUOTE |
Backquote (`) |
K_BRACKETLEFT |
BracketLeft ([) |
K_BACKSLASH |
Backslash (\) |
K_BRACKETRIGHT |
BracketRight (]) |
K_QUOTE |
Quote (') |