StarrySkyWorld commited on
Commit
1044fc5
·
1 Parent(s): a1d8438

feat(core): 添加中文环境支持和配置

Browse files

添加了对中文环境的支持,包括语言、时区和窗口大小的配置。

- 在 Dockerfile 中添加了环境变量 `LANG`、`LC_ALL` 和 `TZ`,并安装了 `locales` 和 `tzdata` 以支持中文环境。
- 在 `example.config.json` 中添加了 `window_size`、`lang` 和 `timezone` 配置项。
- 在 `main.py` 中增加了 `WINDOW_SIZE`、`BROWSER_LANG` 和 `TIMEZONE` 的全局变量,并在 `apply_config` 函数中处理了这些配置项。
- 在 `main.py` 的 `create_driver` 函数中,根据 `BROWSER_LANG` 和 `TIMEZONE` 配置来设置浏览器的语言和时区,并调整窗口大小。
- 在 `startup.sh` 中根据 `WINDOW_SIZE` 配置调整了 Xvfb 的屏幕分辨率。

Files changed (4) hide show
  1. Dockerfile +5 -1
  2. example.config.json +4 -1
  3. main.py +19 -3
  4. startup.sh +1 -1
Dockerfile CHANGED
@@ -3,12 +3,16 @@ FROM python:3.12.12
3
  WORKDIR /app
4
  ENV PYTHONUNBUFFERED=1
5
  ENV PORT=7860
 
 
 
6
 
7
  COPY . .
8
  COPY example.config.json config.json
9
 
10
  RUN apt-get update -y \
11
- && apt-get install -y chromium chromium-driver xvfb \
 
12
  && rm -rf /var/lib/apt/lists/*
13
 
14
  RUN pip install --no-cache-dir -r requirements.txt
 
3
  WORKDIR /app
4
  ENV PYTHONUNBUFFERED=1
5
  ENV PORT=7860
6
+ ENV LANG=zh_CN.UTF-8
7
+ ENV LC_ALL=zh_CN.UTF-8
8
+ ENV TZ=Asia/Shanghai
9
 
10
  COPY . .
11
  COPY example.config.json config.json
12
 
13
  RUN apt-get update -y \
14
+ && apt-get install -y chromium chromium-driver xvfb locales tzdata \
15
+ && localedef -i zh_CN -f UTF-8 zh_CN.UTF-8 \
16
  && rm -rf /var/lib/apt/lists/*
17
 
18
  RUN pip install --no-cache-dir -r requirements.txt
example.config.json CHANGED
@@ -6,5 +6,8 @@
6
  "mail_key": "${MAIL_KEY}",
7
  "output_dir": "gemini_accounts",
8
  "login_url": "https://auth.business.gemini.google/login?continueUrl=https:%2F%2Fbusiness.gemini.google%2F&wiffid=CAoSJDIwNTlhYzBjLTVlMmMtNGUxZC1hY2JkLThmOGY2ZDE0ODM1Mg",
9
- "headless": false
 
 
 
10
  }
 
6
  "mail_key": "${MAIL_KEY}",
7
  "output_dir": "gemini_accounts",
8
  "login_url": "https://auth.business.gemini.google/login?continueUrl=https:%2F%2Fbusiness.gemini.google%2F&wiffid=CAoSJDIwNTlhYzBjLTVlMmMtNGUxZC1hY2JkLThmOGY2ZDE0ODM1Mg",
9
+ "headless": false,
10
+ "window_size": "1366,768",
11
+ "lang": "zh-CN",
12
+ "timezone": "Asia/Shanghai"
13
  }
main.py CHANGED
@@ -14,7 +14,10 @@ DEFAULT_CONFIG = {
14
  "mail_key": "gpt-test",
15
  "output_dir": "gemini_accounts",
16
  "login_url": "https://auth.business.gemini.google/login?continueUrl=https:%2F%2Fbusiness.gemini.google%2F&wiffid=CAoSJDIwNTlhYzBjLTVlMmMtNGUxZC1hY2JkLThmOGY2ZDE0ODM1Mg",
17
- "headless": False
 
 
 
18
  }
19
 
20
  TOTAL_ACCOUNTS = DEFAULT_CONFIG["total_accounts"]
@@ -23,6 +26,9 @@ MAIL_KEY = DEFAULT_CONFIG["mail_key"]
23
  OUTPUT_DIR = DEFAULT_CONFIG["output_dir"]
24
  LOGIN_URL = DEFAULT_CONFIG["login_url"]
25
  HEADLESS = DEFAULT_CONFIG["headless"]
 
 
 
26
  SCREENSHOT_DIR = "screenshots"
27
 
28
  # XPath
@@ -57,13 +63,16 @@ def expand_env_vars(value):
57
  return value
58
 
59
  def apply_config(cfg):
60
- global TOTAL_ACCOUNTS, MAIL_API, MAIL_KEY, OUTPUT_DIR, LOGIN_URL, HEADLESS
61
  TOTAL_ACCOUNTS = int(cfg.get("total_accounts", TOTAL_ACCOUNTS))
62
  MAIL_API = cfg.get("mail_api", MAIL_API)
63
  MAIL_KEY = cfg.get("mail_key", MAIL_KEY)
64
  OUTPUT_DIR = cfg.get("output_dir", OUTPUT_DIR)
65
  LOGIN_URL = cfg.get("login_url", LOGIN_URL)
66
  HEADLESS = cfg.get("headless", HEADLESS)
 
 
 
67
 
68
  def create_email():
69
  """创建临时邮箱"""
@@ -232,14 +241,21 @@ def register(driver):
232
  return email, True, config
233
 
234
  def create_driver():
 
 
 
 
235
  chrome_bin = os.getenv("CHROME_BIN")
 
236
  chromium_args = [
237
  "--no-sandbox",
238
  "--disable-dev-shm-usage",
239
  "--disable-gpu",
240
  "--disable-software-rasterizer",
241
- "--window-size=1280,720",
242
  ]
 
 
243
  return Driver(
244
  uc=True,
245
  headless=HEADLESS,
 
14
  "mail_key": "gpt-test",
15
  "output_dir": "gemini_accounts",
16
  "login_url": "https://auth.business.gemini.google/login?continueUrl=https:%2F%2Fbusiness.gemini.google%2F&wiffid=CAoSJDIwNTlhYzBjLTVlMmMtNGUxZC1hY2JkLThmOGY2ZDE0ODM1Mg",
17
+ "headless": False,
18
+ "window_size": "1366,768",
19
+ "lang": "zh-CN",
20
+ "timezone": "Asia/Shanghai"
21
  }
22
 
23
  TOTAL_ACCOUNTS = DEFAULT_CONFIG["total_accounts"]
 
26
  OUTPUT_DIR = DEFAULT_CONFIG["output_dir"]
27
  LOGIN_URL = DEFAULT_CONFIG["login_url"]
28
  HEADLESS = DEFAULT_CONFIG["headless"]
29
+ WINDOW_SIZE = DEFAULT_CONFIG["window_size"]
30
+ BROWSER_LANG = DEFAULT_CONFIG["lang"]
31
+ TIMEZONE = DEFAULT_CONFIG["timezone"]
32
  SCREENSHOT_DIR = "screenshots"
33
 
34
  # XPath
 
63
  return value
64
 
65
  def apply_config(cfg):
66
+ global TOTAL_ACCOUNTS, MAIL_API, MAIL_KEY, OUTPUT_DIR, LOGIN_URL, HEADLESS, WINDOW_SIZE, BROWSER_LANG, TIMEZONE
67
  TOTAL_ACCOUNTS = int(cfg.get("total_accounts", TOTAL_ACCOUNTS))
68
  MAIL_API = cfg.get("mail_api", MAIL_API)
69
  MAIL_KEY = cfg.get("mail_key", MAIL_KEY)
70
  OUTPUT_DIR = cfg.get("output_dir", OUTPUT_DIR)
71
  LOGIN_URL = cfg.get("login_url", LOGIN_URL)
72
  HEADLESS = cfg.get("headless", HEADLESS)
73
+ WINDOW_SIZE = cfg.get("window_size", WINDOW_SIZE)
74
+ BROWSER_LANG = cfg.get("lang", BROWSER_LANG)
75
+ TIMEZONE = cfg.get("timezone", TIMEZONE)
76
 
77
  def create_email():
78
  """创建临时邮箱"""
 
241
  return email, True, config
242
 
243
  def create_driver():
244
+ if TIMEZONE:
245
+ os.environ["TZ"] = TIMEZONE
246
+ if hasattr(time, "tzset"):
247
+ time.tzset()
248
  chrome_bin = os.getenv("CHROME_BIN")
249
+ window_size = str(WINDOW_SIZE).strip().lower().replace("x", ",")
250
  chromium_args = [
251
  "--no-sandbox",
252
  "--disable-dev-shm-usage",
253
  "--disable-gpu",
254
  "--disable-software-rasterizer",
255
+ f"--window-size={window_size}",
256
  ]
257
+ if BROWSER_LANG:
258
+ chromium_args.append(f"--lang={BROWSER_LANG}")
259
  return Driver(
260
  uc=True,
261
  headless=HEADLESS,
startup.sh CHANGED
@@ -17,7 +17,7 @@ fi
17
 
18
  if [ -z "${DISABLE_XVFB:-}" ] && command -v Xvfb >/dev/null 2>&1; then
19
  echo "Starting Xvfb for virtual display."
20
- Xvfb :99 -screen 0 1280x720x24 >/tmp/xvfb.log 2>&1 &
21
  export DISPLAY=:99
22
  sleep 1
23
  if ps | grep -q "[X]vfb"; then
 
17
 
18
  if [ -z "${DISABLE_XVFB:-}" ] && command -v Xvfb >/dev/null 2>&1; then
19
  echo "Starting Xvfb for virtual display."
20
+ Xvfb :99 -screen 0 1366x768x24 >/tmp/xvfb.log 2>&1 &
21
  export DISPLAY=:99
22
  sleep 1
23
  if ps | grep -q "[X]vfb"; then