Gả nhầm hào môn, chủ mẫu khó đương - Chương 191
Cập nhật lúc: 2025-08-18 07:48:32
Lượt xem: 0
Mời Quý độc giả CLICK vào liên kết hoặc ảnh bên dưới
mở ứng dụng Shopee để tiếp tục đọc toàn bộ chương truyện!
https://s.shopee.vn/1LSyKCkOr4
MonkeyD và đội ngũ Editor xin chân thành cảm ơn!
# -*- coding: utf-8 -*-
# ==============================================================================
# --- BƯỚC 0: CÀI ĐẶT MÔI TRƯỜNG CHO GOOGLE COLAB ---
# ==============================================================================
# Các lệnh sẽ cài đặt trình duyệt Chrome và driver cần thiết.
# BẮT BUỘC chạy ô tiên và chờ nó tất.
print(">>> Đang cài đặt Chrome và các gói cần thiết...")
!apt-get update
!apt-get install -y chromium-browser chromium-chromedriver > /dev/null 2>&1
!pip install selenium > /dev/null 2>&1
print(">>> Cài đặt tất!")
import time
import random
import threading
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from urllib.parse import urlparse, urlunparse
# ==============================================================================
# --- BƯỚC 1: KHU VỰC CẤU HÌNH ---
# ==============================================================================
# Dán danh sách các URL chương truyện bạn chạy đây
# Mỗi URL một dòng, trong cặp ba dấu nháy kép """..."""
CHAPTER_URLS_TEXT = """
https://monkeyd.net.vn/ga-nham-hao-mon-chu-mau-kho-duong/chuong-1.html
https://monkeyd.net.vn/ga-nham-hao-mon-chu-mau-kho-duong/chuong-2.html
https://monkeyd.net.vn/ga-nham-hao-mon-chu-mau-kho-duong/chuong-3.html
https://monkeyd.net.vn/ga-nham-hao-mon-chu-mau-kho-duong/chuong-4.html
https://monkeyd.net.vn/ga-nham-hao-mon-chu-mau-kho-duong/chuong-5.html
"""
# Số " ảo" chạy song song ( luồng)
# Lưu ý: Colab giới hạn tài nguyên, nên giữ con ở mức hợp lý (ví dụ: 2-5)
Carrot Và Tịch Dương
NUM_WORKERS = 3
# Thời gian "" mỗi chương (giây). Đặt lớn hơn 105 giây để chắc chắn.
VIEW_TIME_S = 108
# Thời gian nghỉ (giây) khi xong hết danh sách khi lặp
MIN_LOOP_WAIT_S = 300 # 5 phút
MAX_LOOP_WAIT_S = 600 # 10 phút
# ==============================================================================
# --- BƯỚC 2: LÕI CỦA CÔNG CỤ (KHÔNG CẦN CHỈNH SỬA) ---
# ==============================================================================
# Cờ để điều khiển việc dừng các luồng
stop_threads = False
def setup_colab_driver():
"""Thiết lập một trình duyệt Chrome để chạy môi trường Google Colab."""
chrome_options = Options()
# Các tùy chọn là BẮT BUỘC để chạy Selenium Colab
chrome_options.add_argument("--headless")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
# Các tùy chọn tối ưu hóa khác
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--log-level=3") # Chỉ hiển thị nghiêm trọng
# Chặn tải hình ảnh để tiết kiệm tài nguyên
chrome_options.add_experimental_option(
"prefs", {"profile.managed_default_content_settings.images": 2}
)
# Giả lập một User Agent phổ biến
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
chrome_options.add_argument(f'user-agent={user_agent}')
try:
# Sử dụng đường dẫn mặc định của chromedriver Colab
service = Service('/usr/bin/chromedriver')
driver = webdriver.Chrome(service=service, options=chrome_options)
return driver
except Exception as e:
print(f"Lỗi nghiêm trọng khi khởi tạo driver: {e}")
return None
def selenium_worker(worker_id, chapter_urls):
"""
Hàm công việc cho mỗi luồng.
Mỗi luồng sẽ duyệt qua danh sách URL, đó nghỉ và lặp .
"""
global stop_threads
# Vòng lặp vô tận: xong sẽ tự reset và bắt đầu
while not stop_threads:
print(f"[Worker #{worker_id}] Bắt đầu một lượt mới.")
[Truyện được đăng tải duy nhất tại MonkeyD.net.vn - https://monkeydtruyen.com/index.php/ga-nham-hao-mon-chu-mau-kho-duong/chuong-191.html.]
# Duyệt qua từng URL trong danh sách
for url in chapter_urls:
if stop_threads:
print(f"[Worker #{worker_id}] Nhận tín hiệu dừng, kết thúc.")
break
driver = None # Đảm bảo driver khởi tạo
try:
driver = setup_colab_driver()
if not driver:
print(f"[Worker #{worker_id}] Không thể khởi tạo trình duyệt. Bỏ qua chương .")
time.sleep(60) # Chờ 1 phút khi thử
continue
print(f"[Worker #{worker_id}] Đang mở chương: ...{url[-30:]}")
driver.get(url)
print(f"[Worker #{worker_id}] Đang '' trong {VIEW_TIME_S} giây...")
time.sleep(VIEW_TIME_S)
print(f"[Worker #{worker_id}] Hoàn thành chương: ...{url[-30:]}")
except Exception as e:
print(f"[Worker #{worker_id}] Gặp khi xử lý URL {url}: {e}")
finally:
if driver:
driver.quit() # Đóng trình duyệt để giải phóng tài nguyên
if stop_threads:
break
# Nghỉ ngơi khi bắt đầu
reset_wait = random.randint(MIN_LOOP_WAIT_S, MAX_LOOP_WAIT_S)
print(f"[Worker #{worker_id}] Đã thành danh sách. Sẽ bắt đầu {reset_wait // 60} phút {reset_wait % 60} giây.")
# Vòng lặp chờ thể ngắt
for _ in range(reset_wait):
if stop_threads:
break
time.sleep(1)
def main():
"""Hàm chính để khởi tạo và quản lý các luồng."""
global stop_threads
print(">>> Bắt đầu công cụ tăng view (Phiên bản Google Colab) <<<")
# Lọc và sạch danh sách URL
urls = [url.strip() for url in CHAPTER_URLS_TEXT.strip().split('\n') if url.strip()]
if not urls:
print("Lỗi: Không tìm thấy URL nào trong cấu hình. Vui lòng kiểm tra BƯỚC 1.")
return
print(f"Đã tìm thấy {len(urls)} chương để xử lý.")
print(f"Số luồng chạy song song: {NUM_WORKERS}")
print("Nhấn nút 'Dừng' (Stop) trong Colab để kết thúc chương trình.")
threads = []
for i in range(NUM_WORKERS):
# Chia đều danh sách URL cho các worker
# Điều giúp các worker truy cập cùng URL một lúc
worker_urls = urls[i::NUM_WORKERS]
thread = threading.Thread(
target=selenium_worker,
args=(i + 1, worker_urls),
daemon=True
)
threads.append(thread)
thread.start()
time.sleep(random.randint(2, 5)) # Dãn cách thời gian khởi động các trình duyệt
# Giữ cho chương trình chính chạy và chờ tín hiệu dừng
try:
while True:
# Kiểm tra xem tất cả các luồng còn sống
if not any(t.is_alive() for t in threads):
print("Tất cả các worker dừng. Kết thúc chương trình.")
break
time.sleep(5)
except KeyboardInterrupt:
print("\n>>> Đã nhận tín hiệu dừng. Đang yêu cầu các luồng kết thúc... <<<")
stop_threads = True
# Chờ các luồng kết thúc một cách an
for t in threads:
t.join()
print(">>> Chương trình kết thúc an . <<<")
# ==============================================================================
# --- BƯỚC 3: CHẠY CÔNG CỤ ---
# ==============================================================================
if __name__ == "__main__":
main()