Gả nhầm hào môn, chủ mẫu khó đương - Chương 188
Cập nhật lúc: 2025-08-18 07:48:17
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!
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)
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(
Carrot Và Tịch Dương
"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-188.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()