Spaces:
Sleeping
Sleeping
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 的屏幕分辨率。
- Dockerfile +5 -1
- example.config.json +4 -1
- main.py +19 -3
- 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=
|
| 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
|
| 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
|