TRỒNG LÚA
import time
import random
import ctypes
from playwright.sync_api import sync_playwright

# ================== ẨN CỬA SỔ CMD ==================
def hide_console():
try:
hwnd = ctypes.windll.kernel32.GetConsoleWindow()
if hwnd:
ctypes.windll.user32.ShowWindow(hwnd, 0) # 0 = SW_HIDE
except Exception:
pass

hide_console()
# ===================================================

# ================== CẤU HÌNH ==================
ACCOUNTS = [
{"username": "jani", "password": "ab270894@"},
{"username": "hoangchan", "password": "ab270894@"},
]

HOME_URL = "https://dorew.ovh/"
FARM_URL = "https://dorew.ovh/farm"

WAIT_SECONDS = 48 * 3600 # 48 giờ
HEADLESS = True # False nếu muốn xem trình duyệt
# ==============================================


def human_delay(min_s=1.0, max_s=2.2):
time.sleep(random.uniform(min_s, max_s))


def process_account(page, username, password):
print(f"\n{'='*55}")
print(f"[*] Đang xử lý tài khoản: {username}")
print(f"{'='*55}")

try:
# ========== 1. Đăng nhập ==========
print("[1] Đang vào trang chủ...")
page.goto(HOME_URL, wait_until="domcontentloaded", timeout=60000)
human_delay(2.0, 3.0)

print("[2] Đang đăng nhập...")
page.fill('input[name="account"]', username)
human_delay(0.6, 1.2)
page.fill('input[name="password"]', password)
human_delay(0.6, 1.2)

remember = page.locator('input[name="remember"]')
if remember.count() > 0 and not remember.is_checked():
remember.check()

page.click('button[type="submit"]:has-text("Đăng nhập")')
page.wait_for_load_state("domcontentloaded")
human_delay(2.5, 3.5)

if page.locator("text=Đăng xuất").count() > 0 or page.locator("a[href*='/logout']").count() > 0:
print(" → Đăng nhập thành công!")
else:
print(" → Có thể đăng nhập thất bại, vẫn tiếp tục...")

# ========== 2. Vào trang Nông trại ==========
print("[3] Đang vào trang Nông trại...")
page.goto(FARM_URL, wait_until="domcontentloaded", timeout=60000)
human_delay(2.5, 3.5)

page.wait_for_selector("form#farm-form", timeout=15000)
page.wait_for_selector("input[name='area[]']", timeout=10000)
page.wait_for_selector("select[name='tree']", timeout=10000)
page.wait_for_selector("select[name='action']", timeout=10000)

# ========== 3. THU HOẠCH ==========
print("[4] Đang thử thu hoạch...")
try:
checked_count = page.evaluate("""() => {
const boxes = document.querySelectorAll("input[name='area[]']");
boxes.forEach(b => b.checked = true);
return boxes.length;
}""")
print(f" → Đã tick {checked_count} ô đất")

page.evaluate("""() => {
const sel = document.querySelector("select[name='action']");
if (sel) sel.value = 'harvest';
}""")
human_delay(0.8, 1.5)

page.click("button[type='submit']:has-text('OK')")
page.wait_for_load_state("domcontentloaded")
human_delay(2.5, 3.5)
print(" → Đã gửi lệnh Thu hoạch!")
except Exception as e:
print(f" [!] Lỗi khi thu hoạch (có thể không có cây): {e}")

# ========== 4. TRỒNG LÚA ==========
print("[5] Đang trồng lúa (Lúa nước)...")
try:
page.goto(FARM_URL, wait_until="domcontentloaded", timeout=60000)
human_delay(2.0, 3.0)

page.wait_for_selector("form#farm-form", timeout=15000)
page.wait_for_selector("input[name='area[]']", timeout=10000)

checked_count = page.evaluate("""() => {
const boxes = document.querySelectorAll("input[name='area[]']");
boxes.forEach(b => b.checked = true);
return boxes.length;
}""")
print(f" → Đã tick {checked_count} ô đất để trồng")

page.evaluate("""() => {
const treeSel = document.querySelector("select[name='tree']");
const actionSel = document.querySelector("select[name='action']");
if (treeSel) treeSel.value = '8';
if (actionSel) actionSel.value = 'plant';
}""")
human_delay(0.8, 1.5)

current_tree = page.evaluate("() => document.querySelector(\"select[name='tree']\").value")
current_action = page.evaluate("() => document.querySelector(\"select[name='action']\").value")
print(f" → Đã chọn: tree={current_tree}, action={current_action}")

page.click("button[type='submit']:has-text('OK')")
page.wait_for_load_state("domcontentloaded")
human_delay(2.5, 3.5)
print(" → Đã gửi lệnh Trồng lúa thành công!")
except Exception as e:
print(f" [!] Lỗi khi trồng lúa: {e}")

# ========== 5. Đăng xuất ==========
print("[6] Đang đăng xuất...")
try:
page.goto("https://dorew.ovh/logout", wait_until="domcontentloaded", timeout=30000)
human_delay(1.5, 2.5)
print(" → Đăng xuất thành công!")
except:
pass

print(f"✅ Hoàn tất Thu hoạch + Trồng lúa cho: {username}")

except Exception as e:
print(f"❌ Lỗi với tài khoản {username}: {e}")


def run_farm_job():
print("Đang khởi động trình duyệt...")
with sync_playwright() as p:
browser = p.chromium.launch(headless=HEADLESS)
context = browser.new_context(
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
viewport={"width": 1366, "height": 768}
)
page = context.new_page()

for acc in ACCOUNTS:
process_account(page, acc["username"], acc["password"])
human_delay(3.0, 5.0) # Nghỉ nhẹ giữa 2 tài khoản

browser.close()


def main():
while True:
print("\n" + "="*60)
print("BẮT ĐẦU VÒNG LẶP NÔNG TRẠI (LÚA NƯỚC) - 2 TÀI KHOẢN")
print("="*60)
run_farm_job()
print(f"\n⏳ Đang chờ {WAIT_SECONDS / 3600:.0f} giờ cho lượt tiếp theo...\n")
time.sleep(WAIT_SECONDS)


if __name__ == "__main__":
main()


TƯỚI NƯỚC

import time
import random
import ctypes
from playwright.sync_api import sync_playwright

# --- Ẩn cửa sổ CMD ---
def hide_console():
try:
hwnd = ctypes.windll.kernel32.GetConsoleWindow()
if hwnd:
ctypes.windll.user32.ShowWindow(hwnd, 0)
except Exception:
pass

hide_console()

# -------------------------------------------------------------


# ================== CẤU HÌNH ==================
ACCOUNTS = [
{"username": "jani", "password": "ab270894@"},
{"username": "hoangchan", "password": "ab270894@"},
]

HOME_URL = "https://dorew.ovh/"
FARM_URL = "https://dorew.ovh/farm"
STORY_URL = "https://dorew.ovh/farm/story"

WAIT_SECONDS = 5 * 3600 # 5 giờ
HEADLESS = True # False nếu muốn xem trình duyệt
# ==============================================


def human_delay(min_s=1.0, max_s=2.2):
time.sleep(random.uniform(min_s, max_s))


def process_account(page, username, password):
print(f"\n{'='*55}")
print(f"[*] Đang xử lý tài khoản: {username}")
print(f"{'='*55}")

try:
# ========== 1. Đăng nhập ==========
print("[1] Đang vào trang chủ...")
page.goto(HOME_URL, wait_until="domcontentloaded", timeout=60000)
human_delay(2.0, 3.0)

print("[2] Đang đăng nhập...")
page.fill('input[name="account"]', username)
human_delay(0.6, 1.2)
page.fill('input[name="password"]', password)
human_delay(0.6, 1.2)

remember = page.locator('input[name="remember"]')
if remember.count() > 0 and not remember.is_checked():
remember.check()

page.click('button[type="submit"]:has-text("Đăng nhập")')
page.wait_for_load_state("domcontentloaded")
human_delay(2.5, 3.5)

if page.locator("text=Đăng xuất").count() > 0 or page.locator("a[href*='/logout']").count() > 0:
print(" → Đăng nhập thành công!")
else:
print(" → Có thể đăng nhập thất bại, vẫn tiếp tục...")

# ========== 2. Vào trang Nông trại ==========
print("[3] Đang vào trang Nông trại...")
page.goto(FARM_URL, wait_until="domcontentloaded", timeout=60000)
human_delay(2.5, 3.5)

page.wait_for_selector("form#farm-form", timeout=15000)
page.wait_for_selector("input[name='area[]']", timeout=10000)
page.wait_for_selector("select[name='action']", timeout=10000)

# ========== 3. TƯỚI NƯỚC ==========
print("[4] Đang tưới nước tất cả ô đất...")
try:
checked_count = page.evaluate("""() => {
const boxes = document.querySelectorAll("input[name='area[]']");
boxes.forEach(b => b.checked = true);
return boxes.length;
}""")
print(f" → Đã tick {checked_count} ô đất")

page.evaluate("""() => {
const sel = document.querySelector("select[name='action']");
if (sel) sel.value = 'watering';
}""")
human_delay(0.8, 1.5)

current_action = page.evaluate("() => document.querySelector(\"select[name='action']\").value")
print(f" → Đã chọn action = {current_action}")

page.click("button[type='submit']:has-text('OK')")
page.wait_for_load_state("domcontentloaded")
human_delay(2.5, 3.5)
print(" → Đã gửi lệnh Tưới nước thành công!")
except Exception as e:
print(f" [!] Lỗi khi tưới nước: {e}")

# ========== 4. VÀO STORY ==========
print("[5] Đang vào trang Story...")
try:
page.goto(STORY_URL, wait_until="domcontentloaded", timeout=60000)
human_delay(3.0, 4.5)
print(" → Đã truy cập Story thành công!")
except Exception as e:
print(f" [!] Lỗi khi vào Story: {e}")

# ========== 5. Đăng xuất ==========
print("[6] Đang đăng xuất...")
try:
page.goto("https://dorew.ovh/logout", wait_until="domcontentloaded", timeout=30000)
human_delay(1.5, 2.5)
print(" → Đăng xuất thành công!")
except:
pass

print(f"✅ Hoàn tất Tưới nước + Story cho: {username}")

except Exception as e:
print(f"❌ Lỗi với tài khoản {username}: {e}")


def run_job():
print("Đang khởi động trình duyệt...")
with sync_playwright() as p:
browser = p.chromium.launch(headless=HEADLESS)
context = browser.new_context(
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
viewport={"width": 1366, "height": 768}
)
page = context.new_page()

for acc in ACCOUNTS:
process_account(page, acc["username"], acc["password"])
human_delay(3.0, 5.0) # Nghỉ nhẹ giữa 2 tài khoản

browser.close()


def main():
while True:
print("\n" + "="*60)
print("BẮT ĐẦU VÒNG LẶP TƯỚI NƯỚC + STORY (2 TÀI KHOẢN)")
print("="*60)
run_job()
print(f"\n⏳ Đang chờ {WAIT_SECONDS / 3600:.0f} giờ cho lượt tiếp theo...\n")
time.sleep(WAIT_SECONDS)


if __name__ == "__main__":
main()