main.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import os, time
  2. import random
  3. from dotenv import load_dotenv
  4. from selenium import webdriver
  5. from selenium.webdriver import Keys
  6. from selenium.webdriver.chrome.service import Service
  7. from selenium.webdriver.common.by import By
  8. from selenium.webdriver.chrome.options import Options
  9. # 加载 .env 文件
  10. load_dotenv()
  11. DEV_MODE = os.getenv("DEV_MODE", "true").lower() in ["true", "1"] # 是否是调试模式
  12. def main():
  13. # 设置 ChromeDriver 的路径
  14. chromedriver_path = f"{os.path.dirname(os.path.abspath(__file__))}/drivers/{os.getenv('DRIVER_NAME')}"
  15. # 配置浏览器设置
  16. chrome_options = Options()
  17. # 设置浏览器路径
  18. chrome_options.binary_location = os.getenv("BROWSER_PATH")
  19. DEV_MODE or chrome_options.add_argument("--headless") # 根据是否是dev设置无头模式
  20. chrome_options.add_argument("--no-sandbox")
  21. chrome_options.add_argument("--disable-dev-shm-usage")
  22. chrome_options.add_argument("--disable-blink-features=AutomationControlled")
  23. # 设置浏览器语言和时区
  24. chrome_options.add_argument("--lang=en-US")
  25. prefs = {
  26. "intl.accept_languages": "en-US,en",
  27. "timezone": "Asia/Singapore",
  28. }
  29. chrome_options.add_experimental_option("prefs", prefs)
  30. # 运行脚本后不关闭,方便查看
  31. chrome_options.add_experimental_option("detach", DEV_MODE)
  32. # 数据目录(重要:以后可以拷贝这个目录到其他机器上,实现浏览器环境移植,以实现免登录等)
  33. chrome_options.add_argument(f"user-data-dir={os.getenv("USER_DATA_DIR")}")
  34. chrome_options.add_argument(f"profile-directory=Default")
  35. # 初始化 ChromeDriver
  36. service = Service(chromedriver_path)
  37. driver = webdriver.Chrome(service=service, options=chrome_options)
  38. # 随机位置和大小
  39. driver.set_window_position(random.randint(50, 100), random.randint(50, 100))
  40. driver.set_window_size(random.randint(1440, 1880), random.randint(900, 1000))
  41. # 打开 Twitch
  42. driver.get("https://www.twitch.tv/drops/campaigns")
  43. # 用户名框
  44. username_box = driver.find_element(By.XPATH, '//*[@id="login-username"]')
  45. if username_box is not None:
  46. username_box.click()
  47. time.sleep(2)
  48. username_box.send_keys(os.getenv("TWITCH_USERNAME"), Keys.TAB)
  49. password_box = driver.switch_to.active_element
  50. time.sleep(1)
  51. password_box.send_keys(os.getenv("TWITCH_PASSWORD"), Keys.RETURN)
  52. print(driver.title)
  53. DEV_MODE or driver.quit()
  54. if __name__ == "__main__":
  55. main()