import os, time import random from dotenv import load_dotenv from selenium import webdriver from selenium.webdriver import Keys from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.chrome.options import Options # 加载 .env 文件 load_dotenv() DEV_MODE = os.getenv("DEV_MODE", "true").lower() in ["true", "1"] # 是否是调试模式 def main(): # 设置 ChromeDriver 的路径 chromedriver_path = f"{os.path.dirname(os.path.abspath(__file__))}/drivers/{os.getenv('DRIVER_NAME')}" # 配置浏览器设置 chrome_options = Options() # 设置浏览器路径 chrome_options.binary_location = os.getenv("BROWSER_PATH") DEV_MODE or chrome_options.add_argument("--headless") # 根据是否是dev设置无头模式 chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--disable-dev-shm-usage") chrome_options.add_argument("--disable-blink-features=AutomationControlled") # 设置浏览器语言和时区 chrome_options.add_argument("--lang=en-US") prefs = { "intl.accept_languages": "en-US,en", "timezone": "Asia/Singapore", } chrome_options.add_experimental_option("prefs", prefs) # 运行脚本后不关闭,方便查看 chrome_options.add_experimental_option("detach", DEV_MODE) # 数据目录(重要:以后可以拷贝这个目录到其他机器上,实现浏览器环境移植,以实现免登录等) chrome_options.add_argument(f"user-data-dir={os.getenv("USER_DATA_DIR")}") chrome_options.add_argument(f"profile-directory=Default") # 初始化 ChromeDriver service = Service(chromedriver_path) driver = webdriver.Chrome(service=service, options=chrome_options) # 随机位置和大小 driver.set_window_position(random.randint(50, 100), random.randint(50, 100)) driver.set_window_size(random.randint(1440, 1880), random.randint(900, 1000)) # 打开 Twitch driver.get("https://www.twitch.tv/drops/campaigns") # 用户名框 username_box = driver.find_element(By.XPATH, '//*[@id="login-username"]') if username_box is not None: username_box.click() time.sleep(2) username_box.send_keys(os.getenv("TWITCH_USERNAME"), Keys.TAB) password_box = driver.switch_to.active_element time.sleep(1) password_box.send_keys(os.getenv("TWITCH_PASSWORD"), Keys.RETURN) print(driver.title) DEV_MODE or driver.quit() if __name__ == "__main__": main()