Skip to main content

A toolkit for Selenium automation with multi-profile support

Project description

Selenium BrowserKit

Python Version License Version

Selenium BrowserKit là một bộ công cụ tự động hóa mạnh mẽ với Selenium, được thiết kế để quản lý nhiều profile trình duyệt, chạy song song, và tích hợp các tính năng AI và Telegram. Phù hợp cho việc xây dựng bot, tool automation, hoặc quản lý nhiều tài khoản cùng lúc.

✨ Tính năng chính

  • 🚀 Quản lý đa profile: Hỗ trợ chạy nhiều profile trình duyệt độc lập
  • Chạy song song: BrowserManager cho phép chạy nhiều profile đồng thời
  • 🔒 Hệ thống lock: Tránh xung đột khi chạy nhiều tiến trình
  • 🌐 Quản lý proxy: Hỗ trợ proxy với nhiều định dạng khác nhau
  • 📱 Tích hợp Telegram: Gửi log, screenshot qua Telegram bot
  • 🤖 AI Helper: Tích hợp Gemini AI để phân tích văn bản và hình ảnh
  • 🔧 Tùy biến linh hoạt: Hỗ trợ cả class và function cho Auto/Setup Handler
  • 📦 Extension support: Tự động load các extension Chrome (.crx)

📦 Cài đặt

Yêu cầu hệ thống

  • Python 3.8+
  • Chrome/Chromium & ChromeDriver
  • Windows/Linux/macOS

Cài đặt từ PyPI

pip install selenium-browserkit==1.1.2

Cài đặt từ source

git clone https://github.com/tranledienlam/selenium-browserkit.git
cd selenium-browserkit
pip install -e .

🚀 Quick Start

Cách 1: Sử dụng Class

from selenium_browserkit import BrowserManager, Node, By

class Auto:
    def __init__(self, node: Node, profile: dict):
        self.node = node
        self.profile = profile

        self.run()

    def run(self):
        # Logic tự động chính
        self.node.go_to("https://www.selenium.dev")
        self.node.find_and_click(By.XPATH, '//span[contains(text(),"Download")]')
        self.node.log("Đã click vào Download")

class Setup:
    def __init__(self, node: Node, profile: dict):
        self.node = node
        self.profile = profile

        self.run()

    def run(self):
        # Logic thiết lập ban đầu
        self.node.go_to("https://www.selenium.dev")
        self.node.log("Đã mở https://www.selenium.dev")

# Khởi tạo và chạy
manager = BrowserManager(auto_handler=Auto, setup_handler=Setup)
manager.run_menu(profiles=[{'profile_name': 'test'}])

Cách 2: Sử dụng Function

from selenium_browserkit import BrowserManager, Node, By

def auto(node: Node, profile: dict):
    node.go_to("https://www.selenium.dev")
    node.find_and_click(By.XPATH, '//span[contains(text(),"Download")]')
    node.log("Đã click vào Download")

def setup(node: Node, profile: dict):
    node.go_to("https://www.selenium.dev")
    node.log("Đã mở https://www.selenium.dev")

# Khởi tạo và chạy
manager = BrowserManager(auto_handler=auto, setup_handler=setup)
manager.run_menu(profiles=[{'profile_name': 'test'}])

⚙️ Cấu hình BrowserManager

Cấu hình cơ bản

manager = BrowserManager(auto_handler=Auto, setup_handler=Setup)

# Cấu hình các tùy chọn
manager.update_config(
    headless=False,      # Ẩn trình duyệt
    disable_gpu=False,   # Tắt GPU
    sys_chrome=False,    # Sử dụng Chrome hệ thống
    use_tele=False,      # Bật Telegram helper
    use_ai=False         # Bật AI helper
)

Thêm Extension

# Thêm extension từ thư mục extensions/
manager.add_extensions('Meta-Wallet-*.crx', 'OKX-Wallet-*.crx')

Profile với Proxy

profiles = [
    {
        'profile_name': 'profile1',
        'proxy_info': 'ip:port@username:password'  # Proxy với auth
    },
    {
        'profile_name': 'profile2', 
        'proxy_info': 'ip:port'  # Proxy không auth
    },
    {
        'profile_name': 'profile3',
        'proxy_info': 'username:password@ip:port'  # Proxy auth khác
    }
]

# Thêm proxy dự phòng (fallback)
# Nếu profile không có proxy hoặc proxy trong profile bị lỗi
manager.add_proxies(
    "38.153.152.244:9594",
    "38.153.152.244:9594@user:pass",
    "user:pass@38.153.152.244:9594"
)

manager.run_menu(profiles=profiles)

🔧 API Reference

BrowserManager Class

BrowserManager(auto_handler=None, setup_handler=None)
Method Mô tả
update_config(**kwargs) Cập nhật cấu hình
add_extensions(*args) Thêm extension Chrome
add_proxies(*args) Thêm proxy
run_menu(profiles) Chạy với giao diện menu

Node Class

Method Mô tả
get_driver() Trả về đối tượng Selenium WebDriver gốc
go_to(url, method, wait, timeout) Điều hướng đến URL
find(by, value, parent_element, wait, timeout) Tìm element
finds(by, value, parent_element, wait, timeout) Tìm tất cả elements
find_and_click(by, value, parent_element, wait, timeout) Tìm và click element
find_and_input(by, value, text, parent_element, delay, wait, timeout) Tìm và nhập text
click(element, wait) Click element
press_key(key, parent_element, wait, timeout) Nhấn phím
get_text(by, value, parent_element, wait, timeout) Lấy text từ element
find_in_shadow(selectors, wait, timeout) Tìm element trong shadow DOM
finds_by_text(text, parent_element, wait, timeout) Tìm tất cả element chứa text
has_texts(texts, wait) Kiểm tra nhanh xem trang có chứa một hoặc nhiều đoạn text. Trả về danh sách các text thực sự tồn tại.
take_screenshot() Chụp màn hình (trả về bytes)
snapshot(message, stop) Chụp và lưu ảnh hoặc gửi đến Tele (nếu có). Nếu stop=True thì sẽ dừng luồng code sau khi chụp
log(message, show_log) Ghi log
new_tab(url, method, wait, timeout) Mở tab mới
switch_tab(value, type, wait, timeout) Chuyển tab
close_tab(value, type, wait, timeout) Đóng tab
reload_tab(wait) Reload tab hiện tại
get_url(wait) Lấy URL hiện tại
scroll_to_element(element, wait) Cuộn đến element
scroll_to_position(position, wait) Cuộn đến vị trí "top", "middle", "end" của trang
wait_for_disappear(by, value, parent_element, wait, timeout) Chờ element biến mất
wait_for_page_load(wait, timeout) Chờ trang load xong
ask_ai(prompt, is_image, wait) Hỏi AI (Gemini)
execute_chain(actions, message_error) Thực hiện chuỗi hành động

Ví dụ sử dụng Node

def auto(node: Node, profile: dict):
    # Điều hướng
    node.go_to("https://www.saucedemo.com")
    
    # Nhập text
    node.find_and_input(By.ID, "user-name", "standard_user")
    node.find_and_input(By.ID, "password", "secret_sauce")
    node.find_and_click(By.ID, "login-button")
    
    # Chụp màn hình và lưu lại
    node.snapshot()
    
    # Ghi log
    node.log("Đã đăng nhập thành công")

Utility Class

Method Mô tả
wait_time(second, fix) Chờ thời gian (có random)
fake_data(numbers) Tạo dữ liệu fake cho test
read_data(*field_names) Đọc dữ liệu từ file data.txt
read_config(keyname) Đọc dữ liệu từ file config.txt
timeout(second) Tạo hàm kiểm tra timeout

Ví dụ sử dụng Utility

from selenium_browserkit import Utility

# Tạo dữ liệu fake
profiles = Utility.fake_data(5)

# Đọc dữ liệu từ file data.txt
profiles = Utility.read_data('profile_name', 'email', 'password')

# Đọc dữ liệu từ file config.txt
proxies = Utility.read_data('PROXY')

# Chờ thời gian (có random ±40%)
Utility.wait_time(5, fix=False)  # Random 3-7 giây
Utility.wait_time(5, fix=True)   # Chính xác 5 giây

# Set timeout cho vòng lặp
check_timeout = Utility.timeout(30)
while check_timeout():
    # Thực hiện logic
    pass

📁 Cấu trúc dự án

Khi cài đặt từ PyPI

site-packages/selenium_browserkit/
├── __init__.py
├── browser.py          # BrowserManager
├── node.py            # Node class
└── utils/
    ├── __init__.py
    ├── core.py        # Utility functions
    └── browser_helper.py  # TeleHelper, AIHelper

Khi sử dụng (trong project của bạn)

your_project/
├── snapshot/           # Nơi hình ảnh được lưu (tool tạo)
├── user_data/          # Browser profiles data (tool tạo)
├── extensions/         # Chrome extensions (.crx) (tự tạo)
├── config.txt          # Configuration file (tự tạo)
├── data.txt            # Profiles data (tự tạo)
└── main.py             # File chính

📝 File cấu hình

config.txt (tự tạo trong project)

MAX_PROFILES=5
PYTHON_PATH=E:\venv\Scripts\python.exe
USER_DATA_DIR=E:\profiles\discord
TELE_BOT=<USER_ID>|<BOT_TOKEN>|<ENDPOINT_URL (nếu có)>
AI_BOT=<AI_BOT_TOKEN>

data.txt (tự tạo trong project)

profile_name|email|password|proxy_info (nếu có)
test1|user1@example.com|pass1|ip:port@username:password
test2|user2@example.com|pass2

🤖 Tích hợp AI và Telegram

Telegram Helper

  • Tự động gửi screenshot lên Telegram
  • Gửi log và thông báo trạng thái

AI Helper (Gemini)

  • Phân tích hình ảnh và văn bản
  • Sử dụng node.ask_ai() để tương tác

Cấu hình

# Trong config.txt
TELE_BOT=123456789|bot_token_here|https://api.telegram.org
AI_BOT=your_gemini_api_key

# Sử dụng
manager.update_config(use_ai=True, use_tele=True)

Ví dụ sử dụng AI và Tele

def auto(node: Node, profile: dict):
    # Chụp ảnh gửi Tele
    node.snapshot("Chụp ảnh trang web")
    # Gửi ảnh và hỏi AI
    response = node.ask_ai("Phân tích nội dung trang web này", is_image=True)
    node.log(f"AI response: {response}")

🐛 Troubleshooting

Lỗi thường gặp

  1. ChromeDriver không tìm thấy

    # Cài đặt ChromeDriver
    pip install webdriver-manager
    
  2. Profile bị lock

    # Xóa file lock
    rm user_data/*.pid
    # Hoặc trên Windows
    del user_data\*.pid
    
  3. Extension không load

    • Đảm bảo file .crx nằm trong thư mục extensions/
    • Kiểm tra tên file extension
    • Kiểm tra quyền đọc file
  4. AI/Telegram không hoạt động

    • Kiểm tra API key trong config.txt
    • Kiểm tra format cấu hình TELE_BOT và AI_BOT

🆕 Update v1.1.2

⚙️ Cải tiến mới

  • Chuẩn hóa lại mô tả các Node

    • Giúp dễ đọc, dễ hiểu và thống nhất cách sử dụng các node trong workflow.
  • Node has_textsfinds_by_text

    • Chỉnh lại XPath tìm kiếm, cho phép tìm tất cả phần tử chứa text bất kể thẻ nào (div, span, p,…), không phân biệt hoa thường:
      xpath = (
              "//*[contains("
              "translate(normalize-space(.), "
              "'ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚĂĐĨŨƠƯÀÁẢÃẠẮẰẲẴẶẤẦẨẪẬÉÈẺẼẸÊỀẾỂỄỆÌÍỈĨỊÒÓỎÕỌÔỒỐỔỖỘƠỜỚỞỠỢÙÚỦŨỤƯỪỨỬỮỰÝỲỶỸỴ', "
              "'abcdefghijklmnopqrstuvwxyzàáâãèéêìíòóôõùúăđĩũơưàáảãạắằẳẵặấầẩẫậéèẻẽẹêềếểễệìíỉĩịòóỏõọôồốổỗộơờớởỡợùúủũụưừứửữựýỳỷỹỵ'"
              "), "
              f"'{text.lower()}')]"
          )
      
  • Node get_url

    • Thêm try-except để tránh lỗi khi không lấy được URL hiện tại:
  • Thêm Node wait_for_page_load

    • Chờ trang load hoàn toàn trước khi thực hiện hành động tiếp theo:
      WebDriverWait(self._driver, timeout).until(
          lambda driver: driver.execute_script("return document.readyState") == 'complete'
      )
      

📦 Phiên bản: 1.1.2

📄 License

MIT License - xem file LICENSE để biết thêm chi tiết.

🤝 Contributing

Mọi đóng góp đều được chào đón! Vui lòng:

  1. Fork repository
  2. Tạo feature branch
  3. Commit changes
  4. Push to branch
  5. Tạo Pull Request

📞 Support


🔗 Thông tin liên hệ

📢 Telegram Channel: Airdrop Automation

💰 Ủng hộ tác giả:

  • EVM: 0x3b3784f7b0fed3a8ecdd46c80097a781a6afdb09
  • SOL: 4z3JQNeTnMSHYeg9FjRmXYrQrPHBnPg3zNKisAJjobSP
  • TON: UQDKgC6TesJJU9TilGYoZfj5YYtIzePhdzSDJTctJ-Z27lkR
  • SUI: 0x5fb56584bf561a4a0889e35a96ef3e6595c7ebd13294be436ad61eaf04be4b09
  • APT (APTOS): 0x557ea46189398da1ddf817a634fa91cfb54a32cfc22cadd98bb0327c880bac19

🙏 Khi ủng hộ, nếu không thấy phiền, Bạn có thể gửi token chính của mạng. Cám ơn Bạn đã hỗ trợ!


Made with ❤️ by Tran Lam

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

selenium_browserkit-1.1.2.tar.gz (44.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

selenium_browserkit-1.1.2-py3-none-any.whl (41.7 kB view details)

Uploaded Python 3

File details

Details for the file selenium_browserkit-1.1.2.tar.gz.

File metadata

  • Download URL: selenium_browserkit-1.1.2.tar.gz
  • Upload date:
  • Size: 44.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for selenium_browserkit-1.1.2.tar.gz
Algorithm Hash digest
SHA256 e79445b13a9c29c79bcb4305e143b5c1535bc8ea7cf07a13e5b62a4c1be4fb7a
MD5 633bdaf98a11a11536427a8128a6babe
BLAKE2b-256 87654620e03721846d20ce26bf10a2bbc5136d4b6b976815ff2b7cd20ceeaeef

See more details on using hashes here.

File details

Details for the file selenium_browserkit-1.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for selenium_browserkit-1.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 1ded6345fc4f52f08eec964db55228d2219c69f2c93fff52d86fae5e72bebe0b
MD5 5fb987426d7c7e3b170e91d0c284ade7
BLAKE2b-256 f6a0fc67856342ad00b82e59c9f002806ad43bbab401b003d73e06c3365bf422

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page