Hua-Au-Yeung 1 gadu atpakaļ
revīzija
4dae2dd0c0
7 mainītis faili ar 138 papildinājumiem un 0 dzēšanām
  1. 12 0
      .editorconfig
  2. 11 0
      .env.template
  3. 17 0
      .gitignore
  4. 19 0
      README.md
  5. 2 0
      drivers/.gitignore
  6. 75 0
      main.py
  7. 2 0
      requirements.txt

+ 12 - 0
.editorconfig

@@ -0,0 +1,12 @@
+root = true
+
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 4
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.json]
+indent_size = 2

+ 11 - 0
.env.template

@@ -0,0 +1,11 @@
+DEV_MODE=true
+# 浏览器数据、设置、登录信息目录
+USER_DATA_DIR=/xxx
+# 在drivers目录下使用的driver的文件名
+DRIVER_NAME=chromedriver_xxxx
+# 浏览器路径
+BROWSER_PATH="/xxx/***/chrome"
+
+# Twitch登录信息
+TWITCH_USERNAME=xxx
+TWITCH_PASSWORD=xxx

+ 17 - 0
.gitignore

@@ -0,0 +1,17 @@
+# Windows
+Thumbs.db
+ehthumbs.db
+Desktop.ini
+$RECYCLE.BIN/
+
+# macOS
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Editor
+/.idea/
+
+# Project
+/venv/
+/\.env

+ 19 - 0
README.md

@@ -0,0 +1,19 @@
+## README
+### 一、项目执行
+#### 1. 安装依赖
+```shell
+pip install -r requirements.txt
+```
+
+#### 2. 根据浏览器版本下载对应的`chromedriver`,并放到`dirvers`目录下
+[下载链接](https://googlechromelabs.github.io/chrome-for-testing/#stable)
+
+#### 3. 拷贝`.env.template`为`.env`,并根据实际修改该配置文件
+
+#### 4. 运行
+```shell
+python main.py
+```
+
+### 二、特殊说明
+第一次运行的时候,会遇上不支持浏览器的情况,手动刷新一下,然后再次运行。

+ 2 - 0
drivers/.gitignore

@@ -0,0 +1,2 @@
+*
+!\.gitignore

+ 75 - 0
main.py

@@ -0,0 +1,75 @@
+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()

+ 2 - 0
requirements.txt

@@ -0,0 +1,2 @@
+selenium==4.20.0
+python-dotenv==1.0.1