Skip to content

Timeout 30000ms exceeded 遭遇CF盾 hcaptcha-challenger需要优化 #281

@yuanweize

Description

@yuanweize

这一步测试非常关键,你抓到了真正的凶手

请看你 curl 命令返回的这两行关键信息:

HTTP/2 403 
cf-mitigated: challenge

🕵️‍♂️ 诊断结论:Cloudflare 盾(IP 被风控)

  1. HTTP/2 403:表示禁止访问。Epic 的服务器拒绝了你的请求。
  2. cf-mitigated: challenge:这是最核心的证据。Cloudflare (Epic 的安全防护) 识别出你是一个数据中心(VPS)的 IP,因此没有直接给你展示游戏页面,而是给你弹了一个 “由 Cloudflare 提供的安全检查” (Just a moment...) 或者 验证码拦截页

这就是为什么脚本会超时:
脚本傻傻地在等待页面上的“购买”按钮,但实际上屏幕上显示的是“正在验证您的浏览器...”。脚本不认识这个验证页,等了 30 秒没等到按钮,就报错退出了。

这是AI说的解决方案,一看就没用 就算是家宽也有几率CF盾

---

_### 🚀 解决方案

既然知道了是 Cloudflare 在拦截你的 IP,我们有两招可以尝试。

#### 方案一:增加等待时间(赌 Cloudflare 会放行)

有时候 Cloudflare 的自动检查需要 5-10 秒才能通过。你现在的 `30.0` 秒超时时间可能刚好卡在边缘。我们可以把它拉长,给浏览器足够的时间自动通过这个检查。

1. **编辑配置文件**:
bash
nano .env



2. **修改以下参数(改大!)**:
找到 `RESPONSE_TIMEOUT` 和 `EXECUTION_TIMEOUT`,修改为:
env
# 给浏览器 2 分钟的时间去加载页面,等待 CF 盾消失
RESPONSE_TIMEOUT=120.0

# 给整个任务更多时间
EXECUTION_TIMEOUT=300.0

# 强制使用 1.5-flash 或 2.0-flash-exp (保持现状即可,模型不是问题)




3. **重启容器(必须 down 掉重开)**:
bash
docker compose down
docker compose up





#### 方案二:配置代理(终极方案)

如果方案一改了时间还是超时,说明 Cloudflare 对这个 IP 执行了**死刑**(永久验证码拦截)。数据中心 IP(尤其是 Hetzner、OVH 这种大厂)经常由于被滥用而遭到这种待遇。

你必须让脚本通过一个“干净”的 IP 上网。

1. **寻找一个代理**:你需要一个 HTTP 代理(最好是住宅 IP,或者冷门的 VPS IP)。
2. **编辑配置文件**:
bash
nano .env




3. **添加代理配置**:
在文件末尾添加:
env
# 替换为你的代理地址,格式通常是 http://user:pass@ip:port
http_proxy=http://1.2.3.4:7890
https_proxy=http://1.2.3.4:7890




4. **重启容器**。

---

### 💡 我的建议

你先做 **方案一(改时间)**。

把 `RESPONSE_TIMEOUT` 改成 `120.0`。
因为 Cloudflare 的 `challenge` 很多时候是自动跳转的,只要浏览器不关,过一会就会跳进真正的页面。脚本现在的 30 秒太短了,没等跳过去就杀进程了。

快去改 `.env` 试试!_


下面是日志(大学网段独立ip)

root@dockeryuan ~ # cd /opt/epic-awesome-gamer/docker
root@dockeryuan /opt/epic-awesome-gamer/docker # docker compose logs -f
epic-awesome-gamer  | 2025-12-31 22:41:28 | DEBUG       | __main__:deploy:108 | Starting deployment with configuration: {
epic-awesome-gamer  |   "GEMINI_API_KEY": "**********",
epic-awesome-gamer  |   "cache_dir": "/app/app/volumes/hcaptcha/.cache",
epic-awesome-gamer  |   "challenge_dir": "/app/app/volumes/hcaptcha/.challenge",
epic-awesome-gamer  |   "captcha_response_dir": "/app/app/volumes/hcaptcha/.captcha",
epic-awesome-gamer  |   "ignore_request_types": [],
epic-awesome-gamer  |   "ignore_request_questions": [
epic-awesome-gamer  |     "Please drag the crossing to complete the lines"
epic-awesome-gamer  |   ],
epic-awesome-gamer  |   "DISABLE_BEZIER_TRAJECTORY": true,
epic-awesome-gamer  |   "EXECUTION_TIMEOUT": 300.0,
epic-awesome-gamer  |   "RESPONSE_TIMEOUT": 120.0,
epic-awesome-gamer  |   "RETRY_ON_FAILURE": true,
epic-awesome-gamer  |   "WAIT_FOR_CHALLENGE_VIEW_TO_RENDER_MS": 1500,
epic-awesome-gamer  |   "CONSTRAINT_RESPONSE_SCHEMA": true,
epic-awesome-gamer  |   "CHALLENGE_CLASSIFIER_MODEL": "gemini-2.0-flash-exp",
epic-awesome-gamer  |   "IMAGE_CLASSIFIER_MODEL": "gemini-2.0-flash-exp",
epic-awesome-gamer  |   "SPATIAL_POINT_REASONER_MODEL": "gemini-2.0-flash-exp",
epic-awesome-gamer  |   "SPATIAL_PATH_REASONER_MODEL": "gemini-2.0-flash-exp",
epic-awesome-gamer  |   "IMAGE_CLASSIFIER_THINKING_BUDGET": 970,
epic-awesome-gamer  |   "SPATIAL_POINT_THINKING_BUDGET": 1387,
epic-awesome-gamer  |   "SPATIAL_PATH_THINKING_BUDGET": 1652,
epic-awesome-gamer  |   "coordinate_grid": {
epic-awesome-gamer  |     "x_line_space_num": 15,
epic-awesome-gamer  |     "y_line_space_num": 20,
epic-awesome-gamer  |     "color": "gray",
epic-awesome-gamer  |     "adaptive_contrast": false
epic-awesome-gamer  |   },
epic-awesome-gamer  |   "enable_challenger_debug": false,
epic-awesome-gamer  |   "EPIC_EMAIL": "[email protected]",
epic-awesome-gamer  |   "EPIC_PASSWORD": "**********",
epic-awesome-gamer  |   "ENABLE_APSCHEDULER": true,
epic-awesome-gamer  |   "TASK_TIMEOUT_SECONDS": 900,
epic-awesome-gamer  |   "REDIS_URL": "redis://redis:6379/0",
epic-awesome-gamer  |   "CELERY_WORKER_CONCURRENCY": 1,
epic-awesome-gamer  |   "CELERY_TASK_TIME_LIMIT": 1200,
epic-awesome-gamer  |   "CELERY_TASK_SOFT_TIME_LIMIT": 900,
epic-awesome-gamer  |   "headless": true
epic-awesome-gamer  | }
epic-awesome-gamer  | 2025-12-31 22:41:28 | DEBUG       | __main__:execute_browser_tasks:55 | Starting Epic Games collection task
epic-awesome-gamer  | 2025-12-31 22:41:30 | DEBUG       | __main__:execute_browser_tasks:69 | Browser initialized successfully
epic-awesome-gamer  | 2025-12-31 22:41:30 | DEBUG       | __main__:execute_browser_tasks:72 | Initiating Epic Games authentication
epic-awesome-gamer  | 2025-12-31 22:41:33 | DEBUG       | services.epic_authorization_service:_login:74 | Login with Email
epic-awesome-gamer  | 2025-12-31 22:42:06 | WARNING     | services.epic_authorization_service:_login:108 | Page.click: Timeout 30000ms exceeded.
epic-awesome-gamer  | Call log:
epic-awesome-gamer  |   - waiting for locator("#continue")
epic-awesome-gamer  |     - locator resolved to <button tabindex="0" type="submit" id="continue" aria-label="Continue" class="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeX-large MuiButton-containedSizeX-large MuiButton-colorPrimary MuiButton-disableElevation MuiButton-fullWidth MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeX-large MuiButton-containedSizeX-large MuiButton-colorPrimary MuiButton-disableElevation MuiButton-fullWidth mui-m4oxrl">Continue</button>
epic-awesome-gamer  |   - attempting click action
epic-awesome-gamer  |     - waiting for element to be visible, enabled and stable
epic-awesome-gamer  |     - element is visible, enabled and stable
epic-awesome-gamer  |     - scrolling into view if needed
epic-awesome-gamer  |     - done scrolling
epic-awesome-gamer  |     - performing click action
epic-awesome-gamer  | 
epic-awesome-gamer  | 2025-12-31 22:42:09 | DEBUG       | services.epic_authorization_service:_login:74 | Login with Email
epic-awesome-gamer  | 2025-12-31 22:42:39 | WARNING     | services.epic_authorization_service:_login:108 | Page.goto: Timeout 30000ms exceeded.
epic-awesome-gamer  | Call log:
epic-awesome-gamer  |   - navigating to "https://www.epicgames.com/account/personal?lang=en-US&productName=egs&sessionInvalidated=true", waiting until "networkidle"
epic-awesome-gamer  | 
epic-awesome-gamer  | 2025-12-31 22:42:43 | DEBUG       | services.epic_authorization_service:_login:74 | Login with Email
epic-awesome-gamer  | 2025-12-31 22:43:15 | WARNING     | services.epic_authorization_service:_login:108 | Page.click: Timeout 30000ms exceeded.
epic-awesome-gamer  | Call log:
epic-awesome-gamer  |   - waiting for locator("#continue")
epic-awesome-gamer  |     - locator resolved to <button tabindex="0" type="submit" id="continue" aria-label="Continue" class="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeX-large MuiButton-containedSizeX-large MuiButton-colorPrimary MuiButton-disableElevation MuiButton-fullWidth MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeX-large MuiButton-containedSizeX-large MuiButton-colorPrimary MuiButton-disableElevation MuiButton-fullWidth mui-m4oxrl">Continue</button>
epic-awesome-gamer  |   - attempting click action
epic-awesome-gamer  |     - waiting for element to be visible, enabled and stable
epic-awesome-gamer  |     - element is visible, enabled and stable
epic-awesome-gamer  |     - scrolling into view if needed
epic-awesome-gamer  |     - done scrolling
epic-awesome-gamer  |     - performing click action
epic-awesome-gamer  | 
epic-awesome-gamer  | 2025-12-31 22:43:15 | DEBUG       | __main__:execute_browser_tasks:75 | Authentication completed
epic-awesome-gamer  | 2025-12-31 22:43:15 | DEBUG       | __main__:execute_browser_tasks:78 | Starting free games collection process
epic-awesome-gamer  | 2025-12-31 22:43:20 | ERROR       | services.epic_games_service:_should_ignore_task:145 | ❌ context cookies is not available
epic-awesome-gamer  | 2025-12-31 22:43:20 | DEBUG       | __main__:execute_browser_tasks:82 | Free games collection completed
epic-awesome-gamer  | 2025-12-31 22:43:20 | DEBUG       | __main__:execute_browser_tasks:85 | Cleaning up browser resources
epic-awesome-gamer  | 2025-12-31 22:43:20 | DEBUG       | __main__:execute_browser_tasks:93 | Browser tasks execution finished successfully
epic-awesome-gamer  | 2025-12-31 22:43:20 | DEBUG       | __main__:deploy:160 | Epic Games scheduler started successfully
epic-awesome-gamer  | 2025-12-31 22:43:20 | DEBUG       | __main__:deploy:161 | Current time: 2025-12-31 22:43:20 CST
epic-awesome-gamer  | 2025-12-31 22:43:20 | DEBUG       | __main__:deploy:166 | Next execution scheduled: 2026-01-01 00:30:00 CST (job_id: weekly_epic_games_task)
epic-awesome-gamer  | 2025-12-31 22:43:20 | DEBUG       | __main__:deploy:166 | Next execution scheduled: 2026-01-01 12:00:00 CST (job_id: daily_epic_games_task)
epic-awesome-gamer  | 2025-12-31 22:43:20 | DEBUG       | __main__:deploy:171 | Scheduler is running, send SIGINT or SIGTERM to stop gracefully


下面是日志(netcup)

连接主机...
连接主机成功
Linux NUE 6.12.57+deb13-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.57-1 (2025-11-05) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Dec 31 03:45:16 2025 from 147.32.119.41
root@NUE ~ # cd /opt/
root@NUE /opt # git clone https://github.com/QIN2DIM/epic-awesome-gamer.git
Cloning into 'epic-awesome-gamer'...
remote: Enumerating objects: 3774, done.
remote: Counting objects: 100% (129/129), done.
remote: Compressing objects: 100% (72/72), done.
remote: Total 3774 (delta 80), reused 57 (delta 57), pack-reused 3645 (from 2)
Receiving objects: 100% (3774/3774), 37.91 MiB | 40.36 MiB/s, done.
Resolving deltas: 100% (2093/2093), done.
root@NUE /opt # cd epic-awesome-gamer/docker
root@NUE /opt/epic-awesome-gamer/docker # cp .env.example .env
root@NUE /opt/epic-awesome-gamer/docker # # 赋予脚本执行权限
root@NUE /opt/epic-awesome-gamer/docker # chmod +x ./start.sh
root@NUE /opt/epic-awesome-gamer/docker # 
root@NUE /opt/epic-awesome-gamer/docker # # 启动服务
root@NUE /opt/epic-awesome-gamer/docker # ./start.sh
[+] pull 11/11
 ✔ Image ghcr.io/qin2dim/epic-awesome-gamer:latest Pulled                                                                                                                                46.3s 
[+] up 2/2
 ✔ Network epic-awesome-gamer_default Created                                                                                                                                             0.1s 
 ✔ Container epic-awesome-gamer       Created                                                                                                                                             0.3s 
epic-awesome-gamer  | 2025-12-31 20:22:31 | DEBUG       | __main__:deploy:108 | Starting deployment with configuration: {
epic-awesome-gamer  |   "GEMINI_API_KEY": "**********",
epic-awesome-gamer  |   "cache_dir": "/app/app/volumes/hcaptcha/.cache",
epic-awesome-gamer  |   "challenge_dir": "/app/app/volumes/hcaptcha/.challenge",
epic-awesome-gamer  |   "captcha_response_dir": "/app/app/volumes/hcaptcha/.captcha",
epic-awesome-gamer  |   "ignore_request_types": [],
epic-awesome-gamer  |   "ignore_request_questions": [
epic-awesome-gamer  |     "Please drag the crossing to complete the lines"
epic-awesome-gamer  |   ],
epic-awesome-gamer  |   "DISABLE_BEZIER_TRAJECTORY": true,
epic-awesome-gamer  |   "EXECUTION_TIMEOUT": 120.0,
epic-awesome-gamer  |   "RESPONSE_TIMEOUT": 30.0,
epic-awesome-gamer  |   "RETRY_ON_FAILURE": true,
epic-awesome-gamer  |   "WAIT_FOR_CHALLENGE_VIEW_TO_RENDER_MS": 1500,
epic-awesome-gamer  |   "CONSTRAINT_RESPONSE_SCHEMA": true,
epic-awesome-gamer  |   "CHALLENGE_CLASSIFIER_MODEL": "gemini-2.5-flash",
epic-awesome-gamer  |   "IMAGE_CLASSIFIER_MODEL": "gemini-2.5-pro",
epic-awesome-gamer  |   "SPATIAL_POINT_REASONER_MODEL": "gemini-2.5-pro",
epic-awesome-gamer  |   "SPATIAL_PATH_REASONER_MODEL": "gemini-2.5-pro",
epic-awesome-gamer  |   "IMAGE_CLASSIFIER_THINKING_BUDGET": 970,
epic-awesome-gamer  |   "SPATIAL_POINT_THINKING_BUDGET": 1387,
epic-awesome-gamer  |   "SPATIAL_PATH_THINKING_BUDGET": 1652,
epic-awesome-gamer  |   "coordinate_grid": {
epic-awesome-gamer  |     "x_line_space_num": 15,
epic-awesome-gamer  |     "y_line_space_num": 20,
epic-awesome-gamer  |     "color": "gray",
epic-awesome-gamer  |     "adaptive_contrast": false
epic-awesome-gamer  |   },
epic-awesome-gamer  |   "enable_challenger_debug": false,
epic-awesome-gamer  |   "EPIC_EMAIL": "[email protected]",
epic-awesome-gamer  |   "EPIC_PASSWORD": "**********",
epic-awesome-gamer  |   "ENABLE_APSCHEDULER": true,
epic-awesome-gamer  |   "TASK_TIMEOUT_SECONDS": 900,
epic-awesome-gamer  |   "REDIS_URL": "redis://redis:6379/0",
epic-awesome-gamer  |   "CELERY_WORKER_CONCURRENCY": 1,
epic-awesome-gamer  |   "CELERY_TASK_TIME_LIMIT": 1200,
epic-awesome-gamer  |   "CELERY_TASK_SOFT_TIME_LIMIT": 900,
epic-awesome-gamer  |   "headless": true
epic-awesome-gamer  | }
epic-awesome-gamer  | 2025-12-31 20:22:31 | DEBUG       | __main__:execute_browser_tasks:55 | Starting Epic Games collection task
epic-awesome-gamer  | 2025-12-31 20:22:35 | DEBUG       | __main__:execute_browser_tasks:69 | Browser initialized successfully
epic-awesome-gamer  | 2025-12-31 20:22:35 | DEBUG       | __main__:execute_browser_tasks:72 | Initiating Epic Games authentication
epic-awesome-gamer  | 2025-12-31 20:22:39 | DEBUG       | services.epic_authorization_service:_login:74 | Login with Email
epic-awesome-gamer  | 2025-12-31 20:22:48 | WARNING     | hcaptcha_challenger.agent.challenger:_review_challenge_type:832 | Unknown request_type: request_type=''
epic-awesome-gamer  | 2025-12-31 20:22:49 | ERROR       | hcaptcha_challenger.agent.challenger:get_challenge_frame_locator:349 | Cannot find a valid challenge frame
epic-awesome-gamer  | 2025-12-31 20:22:49 | WARNING     | services.epic_authorization_service:_login:108 | 'NoneType' object has no attribute 'locator'
epic-awesome-gamer  | 2025-12-31 20:22:53 | DEBUG       | services.epic_authorization_service:_login:74 | Login with Email
epic-awesome-gamer  | 2025-12-31 20:23:23 | WARNING     | services.epic_authorization_service:_login:108 | Page.goto: Timeout 30000ms exceeded.
epic-awesome-gamer  | Call log:
epic-awesome-gamer  |   - navigating to "https://www.epicgames.com/account/personal?lang=en-US&productName=egs&sessionInvalidated=true", waiting until "networkidle"
epic-awesome-gamer  | 
epic-awesome-gamer  | 2025-12-31 20:23:26 | DEBUG       | services.epic_authorization_service:_login:74 | Login with Email
epic-awesome-gamer  | 2025-12-31 20:23:56 | WARNING     | services.epic_authorization_service:_login:108 | Page.goto: Timeout 30000ms exceeded.
epic-awesome-gamer  | Call log:
epic-awesome-gamer  |   - navigating to "https://www.epicgames.com/account/personal?lang=en-US&productName=egs&sessionInvalidated=true", waiting until "networkidle"
epic-awesome-gamer  | 
epic-awesome-gamer  | 2025-12-31 20:23:56 | DEBUG       | __main__:execute_browser_tasks:75 | Authentication completed
epic-awesome-gamer  | 2025-12-31 20:23:56 | DEBUG       | __main__:execute_browser_tasks:78 | Starting free games collection process
epic-awesome-gamer  | 2025-12-31 20:24:00 | ERROR       | services.epic_games_service:_should_ignore_task:145 | ❌ context cookies is not available
epic-awesome-gamer  | 2025-12-31 20:24:00 | DEBUG       | __main__:execute_browser_tasks:82 | Free games collection completed
epic-awesome-gamer  | 2025-12-31 20:24:00 | DEBUG       | __main__:execute_browser_tasks:85 | Cleaning up browser resources
epic-awesome-gamer  | 2025-12-31 20:24:01 | DEBUG       | __main__:execute_browser_tasks:93 | Browser tasks execution finished successfully
epic-awesome-gamer  | 2025-12-31 20:24:01 | DEBUG       | __main__:deploy:160 | Epic Games scheduler started successfully
epic-awesome-gamer  | 2025-12-31 20:24:01 | DEBUG       | __main__:deploy:161 | Current time: 2025-12-31 20:24:01 CST
epic-awesome-gamer  | 2025-12-31 20:24:01 | DEBUG       | __main__:deploy:166 | Next execution scheduled: 2026-01-01 00:30:00 CST (job_id: weekly_epic_games_task)
epic-awesome-gamer  | 2025-12-31 20:24:01 | DEBUG       | __main__:deploy:166 | Next execution scheduled: 2026-01-01 12:00:00 CST (job_id: daily_epic_games_task)
epic-awesome-gamer  | 2025-12-31 20:24:01 | DEBUG       | __main__:deploy:171 | Scheduler is running, send SIGINT or SIGTERM to stop gracefully
^C
root@NUE /opt/epic-awesome-gamer/docker # curl https://www.epicgames.com/account/personal?lang=en-US&productName=egs&sessionInvalidated=true
[1] 384898
[2] 384899
root@NUE /opt/epic-awesome-gamer/docker # Found. Redirecting to https://epicgames.com/id/api/login?redirect_uri=https%3A%2F%2Fwww.epicgames.com%2Faccount%2Fpersonal%3Flang%3Den-US
[1]-  Done                    curl https://www.epicgames.com/account/personal?lang=en-US
[2]+  Done                    productName=egs
root@NUE /opt/epic-awesome-gamer/docker # docker compose pull && docker compose up -d
[+] pull 1/1
 ✔ Image ghcr.io/qin2dim/epic-awesome-gamer:latest Pulled                                                                                                                                 1.0s 
root@NUE /opt/epic-awesome-gamer/docker # docker ps epic-awesome-gamer
docker: 'docker ps' accepts no arguments

Usage:  docker ps [OPTIONS]

Run 'docker ps --help' for more information
root@NUE /opt/epic-awesome-gamer/docker # docker logs epic-awesome-gamer
2025-12-31 20:22:31 | DEBUG       | __main__:deploy:108 | Starting deployment with configuration: {
  "GEMINI_API_KEY": "**********",
  "cache_dir": "/app/app/volumes/hcaptcha/.cache",
  "challenge_dir": "/app/app/volumes/hcaptcha/.challenge",
  "captcha_response_dir": "/app/app/volumes/hcaptcha/.captcha",
  "ignore_request_types": [],
  "ignore_request_questions": [
    "Please drag the crossing to complete the lines"
  ],
  "DISABLE_BEZIER_TRAJECTORY": true,
  "EXECUTION_TIMEOUT": 120.0,
  "RESPONSE_TIMEOUT": 30.0,
  "RETRY_ON_FAILURE": true,
  "WAIT_FOR_CHALLENGE_VIEW_TO_RENDER_MS": 1500,
  "CONSTRAINT_RESPONSE_SCHEMA": true,
  "CHALLENGE_CLASSIFIER_MODEL": "gemini-2.5-flash",
  "IMAGE_CLASSIFIER_MODEL": "gemini-2.5-pro",
  "SPATIAL_POINT_REASONER_MODEL": "gemini-2.5-pro",
  "SPATIAL_PATH_REASONER_MODEL": "gemini-2.5-pro",
  "IMAGE_CLASSIFIER_THINKING_BUDGET": 970,
  "SPATIAL_POINT_THINKING_BUDGET": 1387,
  "SPATIAL_PATH_THINKING_BUDGET": 1652,
  "coordinate_grid": {
    "x_line_space_num": 15,
    "y_line_space_num": 20,
    "color": "gray",
    "adaptive_contrast": false
  },
  "enable_challenger_debug": false,
  "EPIC_EMAIL": "[email protected]",
  "EPIC_PASSWORD": "**********",
  "ENABLE_APSCHEDULER": true,
  "TASK_TIMEOUT_SECONDS": 900,
  "REDIS_URL": "redis://redis:6379/0",
  "CELERY_WORKER_CONCURRENCY": 1,
  "CELERY_TASK_TIME_LIMIT": 1200,
  "CELERY_TASK_SOFT_TIME_LIMIT": 900,
  "headless": true
}
2025-12-31 20:22:31 | DEBUG       | __main__:execute_browser_tasks:55 | Starting Epic Games collection task
2025-12-31 20:22:35 | DEBUG       | __main__:execute_browser_tasks:69 | Browser initialized successfully
2025-12-31 20:22:35 | DEBUG       | __main__:execute_browser_tasks:72 | Initiating Epic Games authentication
2025-12-31 20:22:39 | DEBUG       | services.epic_authorization_service:_login:74 | Login with Email
2025-12-31 20:22:48 | WARNING     | hcaptcha_challenger.agent.challenger:_review_challenge_type:832 | Unknown request_type: request_type=''
2025-12-31 20:22:49 | ERROR       | hcaptcha_challenger.agent.challenger:get_challenge_frame_locator:349 | Cannot find a valid challenge frame
2025-12-31 20:22:49 | WARNING     | services.epic_authorization_service:_login:108 | 'NoneType' object has no attribute 'locator'
2025-12-31 20:22:53 | DEBUG       | services.epic_authorization_service:_login:74 | Login with Email
2025-12-31 20:23:23 | WARNING     | services.epic_authorization_service:_login:108 | Page.goto: Timeout 30000ms exceeded.
Call log:
  - navigating to "https://www.epicgames.com/account/personal?lang=en-US&productName=egs&sessionInvalidated=true", waiting until "networkidle"

2025-12-31 20:23:26 | DEBUG       | services.epic_authorization_service:_login:74 | Login with Email
2025-12-31 20:23:56 | WARNING     | services.epic_authorization_service:_login:108 | Page.goto: Timeout 30000ms exceeded.
Call log:
  - navigating to "https://www.epicgames.com/account/personal?lang=en-US&productName=egs&sessionInvalidated=true", waiting until "networkidle"

2025-12-31 20:23:56 | DEBUG       | __main__:execute_browser_tasks:75 | Authentication completed
2025-12-31 20:23:56 | DEBUG       | __main__:execute_browser_tasks:78 | Starting free games collection process
2025-12-31 20:24:00 | ERROR       | services.epic_games_service:_should_ignore_task:145 | ❌ context cookies is not available
2025-12-31 20:24:00 | DEBUG       | __main__:execute_browser_tasks:82 | Free games collection completed
2025-12-31 20:24:00 | DEBUG       | __main__:execute_browser_tasks:85 | Cleaning up browser resources
2025-12-31 20:24:01 | DEBUG       | __main__:execute_browser_tasks:93 | Browser tasks execution finished successfully
2025-12-31 20:24:01 | DEBUG       | __main__:deploy:160 | Epic Games scheduler started successfully
2025-12-31 20:24:01 | DEBUG       | __main__:deploy:161 | Current time: 2025-12-31 20:24:01 CST
2025-12-31 20:24:01 | DEBUG       | __main__:deploy:166 | Next execution scheduled: 2026-01-01 00:30:00 CST (job_id: weekly_epic_games_task)
2025-12-31 20:24:01 | DEBUG       | __main__:deploy:166 | Next execution scheduled: 2026-01-01 12:00:00 CST (job_id: daily_epic_games_task)
2025-12-31 20:24:01 | DEBUG       | __main__:deploy:171 | Scheduler is running, send SIGINT or SIGTERM to stop gracefully
root@NUE /opt/epic-awesome-gamer/docker # ./start.sh
[+] pull 1/1
 ✔ Image ghcr.io/qin2dim/epic-awesome-gamer:latest Pulled                                                                                                                                 1.0s 
[+] down 1/2
 ✔ Container epic-awesome-gamer       Removed                                                                                                                                             0.3s 
 ⠙ Network epic-awesome-gamer_default Removing                                                                                                                                            0.1s 
[+] up 2/2
 ✔ Network epic-awesome-gamer_default Created                                                                                                                                             0.0s 
 ✔ Container epic-awesome-gamer       Created                                                                                                                                             0.1s 
epic-awesome-gamer  | 2025-12-31 21:59:06 | DEBUG       | __main__:deploy:108 | Starting deployment with configuration: {
epic-awesome-gamer  |   "GEMINI_API_KEY": "**********",
epic-awesome-gamer  |   "cache_dir": "/app/app/volumes/hcaptcha/.cache",
epic-awesome-gamer  |   "challenge_dir": "/app/app/volumes/hcaptcha/.challenge",
epic-awesome-gamer  |   "captcha_response_dir": "/app/app/volumes/hcaptcha/.captcha",
epic-awesome-gamer  |   "ignore_request_types": [],
epic-awesome-gamer  |   "ignore_request_questions": [
epic-awesome-gamer  |     "Please drag the crossing to complete the lines"
epic-awesome-gamer  |   ],
epic-awesome-gamer  |   "DISABLE_BEZIER_TRAJECTORY": true,
epic-awesome-gamer  |   "EXECUTION_TIMEOUT": 120.0,
epic-awesome-gamer  |   "RESPONSE_TIMEOUT": 30.0,
epic-awesome-gamer  |   "RETRY_ON_FAILURE": true,
epic-awesome-gamer  |   "WAIT_FOR_CHALLENGE_VIEW_TO_RENDER_MS": 1500,
epic-awesome-gamer  |   "CONSTRAINT_RESPONSE_SCHEMA": true,
epic-awesome-gamer  |   "CHALLENGE_CLASSIFIER_MODEL": "gemini-1.5-flash",
epic-awesome-gamer  |   "IMAGE_CLASSIFIER_MODEL": "gemini-1.5-flash",
epic-awesome-gamer  |   "SPATIAL_POINT_REASONER_MODEL": "gemini-1.5-flash",
epic-awesome-gamer  |   "SPATIAL_PATH_REASONER_MODEL": "gemini-1.5-flash",
epic-awesome-gamer  |   "IMAGE_CLASSIFIER_THINKING_BUDGET": 970,
epic-awesome-gamer  |   "SPATIAL_POINT_THINKING_BUDGET": 1387,
epic-awesome-gamer  |   "SPATIAL_PATH_THINKING_BUDGET": 1652,
epic-awesome-gamer  |   "coordinate_grid": {
epic-awesome-gamer  |     "x_line_space_num": 15,
epic-awesome-gamer  |     "y_line_space_num": 20,
epic-awesome-gamer  |     "color": "gray",
epic-awesome-gamer  |     "adaptive_contrast": false
epic-awesome-gamer  |   },
epic-awesome-gamer  |   "enable_challenger_debug": false,
epic-awesome-gamer  |   "EPIC_EMAIL": "[email protected]",
epic-awesome-gamer  |   "EPIC_PASSWORD": "**********",
epic-awesome-gamer  |   "ENABLE_APSCHEDULER": true,
epic-awesome-gamer  |   "TASK_TIMEOUT_SECONDS": 900,
epic-awesome-gamer  |   "REDIS_URL": "redis://redis:6379/0",
epic-awesome-gamer  |   "CELERY_WORKER_CONCURRENCY": 1,
epic-awesome-gamer  |   "CELERY_TASK_TIME_LIMIT": 1200,
epic-awesome-gamer  |   "CELERY_TASK_SOFT_TIME_LIMIT": 900,
epic-awesome-gamer  |   "headless": true
epic-awesome-gamer  | }
epic-awesome-gamer  | 2025-12-31 21:59:06 | DEBUG       | __main__:execute_browser_tasks:55 | Starting Epic Games collection task
epic-awesome-gamer  | 2025-12-31 21:59:08 | DEBUG       | __main__:execute_browser_tasks:69 | Browser initialized successfully
epic-awesome-gamer  | 2025-12-31 21:59:08 | DEBUG       | __main__:execute_browser_tasks:72 | Initiating Epic Games authentication
epic-awesome-gamer  | 2025-12-31 21:59:12 | DEBUG       | services.epic_authorization_service:_login:74 | Login with Email
epic-awesome-gamer  | 2025-12-31 21:59:19 | ERROR       | services.epic_authorization_service:_on_response_anything:39 | POST https://www.epicgames.com/id/api/login - {
epic-awesome-gamer  |   "errorCode": "errors.com.epicgames.accountportal.csrf_token_invalid",
epic-awesome-gamer  |   "message": "Something went wrong. Please refresh the page and check that you allow cookies on your device. If the error persists, please contact <a href=\"https://www.epicgames.com/help/contact-us\" target=\"_blank\" rel=\"noopener noreferrer\">Player Support</a>.",
epic-awesome-gamer  |   "correlationId": "0675faa0-e651-11f0-b0a4-55e2cafaf012"
epic-awesome-gamer  | }
epic-awesome-gamer  | 2025-12-31 21:59:20 | WARNING     | hcaptcha_challenger.agent.challenger:_review_challenge_type:832 | Unknown request_type: request_type=''
epic-awesome-gamer  | 2025-12-31 21:59:21 | ERROR       | hcaptcha_challenger.agent.challenger:get_challenge_frame_locator:349 | Cannot find a valid challenge frame
epic-awesome-gamer  | 2025-12-31 21:59:21 | WARNING     | services.epic_authorization_service:_login:108 | 'NoneType' object has no attribute 'locator'
epic-awesome-gamer  | 2025-12-31 21:59:24 | DEBUG       | services.epic_authorization_service:_login:74 | Login with Email
epic-awesome-gamer  | 2025-12-31 21:59:29 | ERROR       | hcaptcha_challenger.agent.challenger:_task_handler:722 | An error occurred while injecting hsw script: Page.evaluate: "btoa" is read-only
epic-awesome-gamer  | QPH_YE@debugger eval code line 291 > eval:2:914798
epic-awesome-gamer  | @debugger eval code line 291 > eval:2:928526
epic-awesome-gamer  | evaluate@debugger eval code:291:30
epic-awesome-gamer  | @debugger eval code:1:44
epic-awesome-gamer  | 
^C
root@NUE /opt/epic-awesome-gamer/docker # docker compose down
[+] down 2/2
 ✔ Container epic-awesome-gamer       Removed                                                                                                                                             0.5s 
 ✔ Network epic-awesome-gamer_default Removed                                                                                                                                             0.2s 
root@NUE /opt/epic-awesome-gamer/docker # docker compose pull && docker compose up -d
[+] pull 1/1
 ✔ Image ghcr.io/qin2dim/epic-awesome-gamer:latest Pulled                                                                                                                                 1.0s 
[+] up 2/2
 ✔ Network epic-awesome-gamer_default Created                                                                                                                                             0.0s 
 ✔ Container epic-awesome-gamer       Created                                                                                                                                             0.1s 
root@NUE /opt/epic-awesome-gamer/docker # docker logs epic-awesome-gamer
2025-12-31 22:00:18 | DEBUG       | __main__:deploy:108 | Starting deployment with configuration: {
  "GEMINI_API_KEY": "**********",
  "cache_dir": "/app/app/volumes/hcaptcha/.cache",
  "challenge_dir": "/app/app/volumes/hcaptcha/.challenge",
  "captcha_response_dir": "/app/app/volumes/hcaptcha/.captcha",
  "ignore_request_types": [],
  "ignore_request_questions": [
    "Please drag the crossing to complete the lines"
  ],
  "DISABLE_BEZIER_TRAJECTORY": true,
  "EXECUTION_TIMEOUT": 120.0,
  "RESPONSE_TIMEOUT": 30.0,
  "RETRY_ON_FAILURE": true,
  "WAIT_FOR_CHALLENGE_VIEW_TO_RENDER_MS": 1500,
  "CONSTRAINT_RESPONSE_SCHEMA": true,
  "CHALLENGE_CLASSIFIER_MODEL": "gemini-2.0-flash-exp",
  "IMAGE_CLASSIFIER_MODEL": "gemini-2.0-flash-exp",
  "SPATIAL_POINT_REASONER_MODEL": "gemini-2.0-flash-exp",
  "SPATIAL_PATH_REASONER_MODEL": "gemini-2.0-flash-exp",
  "IMAGE_CLASSIFIER_THINKING_BUDGET": 970,
  "SPATIAL_POINT_THINKING_BUDGET": 1387,
  "SPATIAL_PATH_THINKING_BUDGET": 1652,
  "coordinate_grid": {
    "x_line_space_num": 15,
    "y_line_space_num": 20,
    "color": "gray",
    "adaptive_contrast": false
  },
  "enable_challenger_debug": false,
  "EPIC_EMAIL": "[email protected]",
  "EPIC_PASSWORD": "**********",
  "ENABLE_APSCHEDULER": true,
  "TASK_TIMEOUT_SECONDS": 900,
  "REDIS_URL": "redis://redis:6379/0",
  "CELERY_WORKER_CONCURRENCY": 1,
  "CELERY_TASK_TIME_LIMIT": 1200,
  "CELERY_TASK_SOFT_TIME_LIMIT": 900,
  "headless": true
}
2025-12-31 22:00:18 | DEBUG       | __main__:execute_browser_tasks:55 | Starting Epic Games collection task
root@NUE /opt/epic-awesome-gamer/docker # docker compose logs -f
epic-awesome-gamer  | 2025-12-31 22:00:18 | DEBUG       | __main__:deploy:108 | Starting deployment with configuration: {
epic-awesome-gamer  |   "GEMINI_API_KEY": "**********",
epic-awesome-gamer  |   "cache_dir": "/app/app/volumes/hcaptcha/.cache",
epic-awesome-gamer  |   "challenge_dir": "/app/app/volumes/hcaptcha/.challenge",
epic-awesome-gamer  |   "captcha_response_dir": "/app/app/volumes/hcaptcha/.captcha",
epic-awesome-gamer  |   "ignore_request_types": [],
epic-awesome-gamer  |   "ignore_request_questions": [
epic-awesome-gamer  |     "Please drag the crossing to complete the lines"
epic-awesome-gamer  |   ],
epic-awesome-gamer  |   "DISABLE_BEZIER_TRAJECTORY": true,
epic-awesome-gamer  |   "EXECUTION_TIMEOUT": 120.0,
epic-awesome-gamer  |   "RESPONSE_TIMEOUT": 30.0,
epic-awesome-gamer  |   "RETRY_ON_FAILURE": true,
epic-awesome-gamer  |   "WAIT_FOR_CHALLENGE_VIEW_TO_RENDER_MS": 1500,
epic-awesome-gamer  |   "CONSTRAINT_RESPONSE_SCHEMA": true,
epic-awesome-gamer  |   "CHALLENGE_CLASSIFIER_MODEL": "gemini-2.0-flash-exp",
epic-awesome-gamer  |   "IMAGE_CLASSIFIER_MODEL": "gemini-2.0-flash-exp",
epic-awesome-gamer  |   "SPATIAL_POINT_REASONER_MODEL": "gemini-2.0-flash-exp",
epic-awesome-gamer  |   "SPATIAL_PATH_REASONER_MODEL": "gemini-2.0-flash-exp",
epic-awesome-gamer  |   "IMAGE_CLASSIFIER_THINKING_BUDGET": 970,
epic-awesome-gamer  |   "SPATIAL_POINT_THINKING_BUDGET": 1387,
epic-awesome-gamer  |   "SPATIAL_PATH_THINKING_BUDGET": 1652,
epic-awesome-gamer  |   "coordinate_grid": {
epic-awesome-gamer  |     "x_line_space_num": 15,
epic-awesome-gamer  |     "y_line_space_num": 20,
epic-awesome-gamer  |     "color": "gray",
epic-awesome-gamer  |     "adaptive_contrast": false
epic-awesome-gamer  |   },
epic-awesome-gamer  |   "enable_challenger_debug": false,
epic-awesome-gamer  |   "EPIC_EMAIL": "[email protected]",
epic-awesome-gamer  |   "EPIC_PASSWORD": "**********",
epic-awesome-gamer  |   "ENABLE_APSCHEDULER": true,
epic-awesome-gamer  |   "TASK_TIMEOUT_SECONDS": 900,
epic-awesome-gamer  |   "REDIS_URL": "redis://redis:6379/0",
epic-awesome-gamer  |   "CELERY_WORKER_CONCURRENCY": 1,
epic-awesome-gamer  |   "CELERY_TASK_TIME_LIMIT": 1200,
epic-awesome-gamer  |   "CELERY_TASK_SOFT_TIME_LIMIT": 900,
epic-awesome-gamer  |   "headless": true
epic-awesome-gamer  | }
epic-awesome-gamer  | 2025-12-31 22:00:18 | DEBUG       | __main__:execute_browser_tasks:55 | Starting Epic Games collection task
epic-awesome-gamer  | 2025-12-31 22:00:20 | DEBUG       | __main__:execute_browser_tasks:69 | Browser initialized successfully
epic-awesome-gamer  | 2025-12-31 22:00:20 | DEBUG       | __main__:execute_browser_tasks:72 | Initiating Epic Games authentication
epic-awesome-gamer  | 2025-12-31 22:00:25 | SUCCESS     | services.epic_authorization_service:invoke:121 | Epic Games is already logged in
epic-awesome-gamer  | 2025-12-31 22:00:25 | DEBUG       | __main__:execute_browser_tasks:75 | Authentication completed
epic-awesome-gamer  | 2025-12-31 22:00:25 | DEBUG       | __main__:execute_browser_tasks:78 | Starting free games collection process
epic-awesome-gamer  | 2025-12-31 22:00:32 | DEBUG       | services.epic_games_service:collect_epic_games:184 | Discover promotion 
epic-awesome-gamer  | {
epic-awesome-gamer  |   "title": "Trine Classic Collection",
epic-awesome-gamer  |   "url": "https://store.epicgames.com/en-US/p/mysterygame2025-14"
epic-awesome-gamer  | }
epic-awesome-gamer  | 2025-12-31 22:01:38 | ERROR       | services.epic_games_service:collect_epic_games:195 | Locator.text_content: Timeout 30000ms exceeded.
epic-awesome-gamer  | Call log:
epic-awesome-gamer  |   - waiting for locator("//aside//button[@data-testid='purchase-cta-button']")
epic-awesome-gamer  | 
epic-awesome-gamer  | Traceback (most recent call last):
epic-awesome-gamer  |   File "/app/app/deploy.py", line 182, in <module>
epic-awesome-gamer  |     asyncio.run(deploy())
epic-awesome-gamer  |   File "/usr/lib/python3.12/asyncio/runners.py", line 194, in run
epic-awesome-gamer  |     return runner.run(main)
epic-awesome-gamer  |   File "/usr/lib/python3.12/asyncio/runners.py", line 118, in run
epic-awesome-gamer  |     return self._loop.run_until_complete(task)
epic-awesome-gamer  |   File "/usr/lib/python3.12/asyncio/base_events.py", line 674, in run_until_complete
epic-awesome-gamer  |     self.run_forever()
epic-awesome-gamer  |   File "/usr/lib/python3.12/asyncio/base_events.py", line 641, in run_forever
epic-awesome-gamer  |     self._run_once()
epic-awesome-gamer  |   File "/usr/lib/python3.12/asyncio/base_events.py", line 1987, in _run_once
epic-awesome-gamer  |     handle._run()
epic-awesome-gamer  |   File "/usr/lib/python3.12/asyncio/events.py", line 88, in _run
epic-awesome-gamer  |     self._context.run(self._callback, *self._args)
epic-awesome-gamer  |   File "/app/app/deploy.py", line 113, in deploy
epic-awesome-gamer  |     await execute_browser_tasks(headless=headless)
epic-awesome-gamer  |   File "/app/app/deploy.py", line 81, in execute_browser_tasks
epic-awesome-gamer  |     await agent.collect_epic_games()
epic-awesome-gamer  | > File "/app/app/services/epic_games_service.py", line 193, in collect_epic_games
epic-awesome-gamer  |     await self.epic_games.collect_weekly_games(game_promotions)
epic-awesome-gamer  |   File "/app/.venv/lib/python3.12/site-packages/tenacity/asyncio/__init__.py", line 189, in async_wrapped
epic-awesome-gamer  |     return await copy(fn, *args, **kwargs)
epic-awesome-gamer  |   File "/app/.venv/lib/python3.12/site-packages/tenacity/asyncio/__init__.py", line 111, in __call__
epic-awesome-gamer  |     do = await self.iter(retry_state=retry_state)
epic-awesome-gamer  |   File "/app/.venv/lib/python3.12/site-packages/tenacity/asyncio/__init__.py", line 153, in iter
epic-awesome-gamer  |     result = await action(retry_state)
epic-awesome-gamer  |   File "/app/.venv/lib/python3.12/site-packages/tenacity/_utils.py", line 99, in inner
epic-awesome-gamer  |     return call(*args, **kwargs)
epic-awesome-gamer  |   File "/app/.venv/lib/python3.12/site-packages/tenacity/__init__.py", line 418, in exc_check
epic-awesome-gamer  |     raise retry_exc.reraise()
epic-awesome-gamer  |   File "/app/.venv/lib/python3.12/site-packages/tenacity/__init__.py", line 185, in reraise
epic-awesome-gamer  |     raise self.last_attempt.result()
epic-awesome-gamer  |   File "/usr/lib/python3.12/concurrent/futures/_base.py", line 449, in result
epic-awesome-gamer  |     return self.__get_result()
epic-awesome-gamer  |   File "/usr/lib/python3.12/concurrent/futures/_base.py", line 401, in __get_result
epic-awesome-gamer  |     raise self._exception
epic-awesome-gamer  |   File "/app/.venv/lib/python3.12/site-packages/tenacity/asyncio/__init__.py", line 114, in __call__
epic-awesome-gamer  |     result = await fn(*args, **kwargs)
epic-awesome-gamer  |   File "/app/app/services/epic_games_service.py", line 374, in collect_weekly_games
epic-awesome-gamer  |     if not await self.add_promotion_to_cart(self.page, urls):
epic-awesome-gamer  |   File "/app/app/services/epic_games_service.py", line 273, in add_promotion_to_cart
epic-awesome-gamer  |     purchase_status = await purchase_btn.text_content()
epic-awesome-gamer  |   File "/app/.venv/lib/python3.12/site-packages/playwright/async_api/_generated.py", line 17603, in text_content
epic-awesome-gamer  |     await self._impl_obj.text_content(timeout=timeout)
epic-awesome-gamer  |   File "/app/.venv/lib/python3.12/site-packages/playwright/_impl/_locator.py", line 630, in text_content
epic-awesome-gamer  |     return await self._frame.text_content(
epic-awesome-gamer  |   File "/app/.venv/lib/python3.12/site-packages/playwright/_impl/_frame.py", line 648, in text_content
epic-awesome-gamer  |     return await self._channel.send(
epic-awesome-gamer  |   File "/app/.venv/lib/python3.12/site-packages/playwright/_impl/_connection.py", line 69, in send
epic-awesome-gamer  |     return await self._connection.wrap_api_call(
epic-awesome-gamer  |   File "/app/.venv/lib/python3.12/site-packages/playwright/_impl/_connection.py", line 558, in wrap_api_call
epic-awesome-gamer  |     raise rewrite_error(error, f"{parsed_st['apiName']}: {error}") from None
epic-awesome-gamer  | playwright._impl._errors.TimeoutError: Locator.text_content: Timeout 30000ms exceeded.
epic-awesome-gamer  | Call log:
epic-awesome-gamer  |   - waiting for locator("//aside//button[@data-testid='purchase-cta-button']")
epic-awesome-gamer  | 
epic-awesome-gamer  | 2025-12-31 22:01:38 | DEBUG       | services.epic_games_service:collect_epic_games:201 | All tasks in the workflow have been completed
epic-awesome-gamer  | 2025-12-31 22:01:38 | DEBUG       | __main__:execute_browser_tasks:82 | Free games collection completed
epic-awesome-gamer  | 2025-12-31 22:01:38 | DEBUG       | __main__:execute_browser_tasks:85 | Cleaning up browser resources
epic-awesome-gamer  | 2025-12-31 22:01:39 | DEBUG       | __main__:execute_browser_tasks:93 | Browser tasks execution finished successfully
epic-awesome-gamer  | 2025-12-31 22:01:39 | DEBUG       | __main__:deploy:160 | Epic Games scheduler started successfully
epic-awesome-gamer  | 2025-12-31 22:01:39 | DEBUG       | __main__:deploy:161 | Current time: 2025-12-31 22:01:39 CST
epic-awesome-gamer  | 2025-12-31 22:01:39 | DEBUG       | __main__:deploy:166 | Next execution scheduled: 2026-01-01 00:30:00 CST (job_id: weekly_epic_games_task)
epic-awesome-gamer  | 2025-12-31 22:01:39 | DEBUG       | __main__:deploy:166 | Next execution scheduled: 2026-01-01 12:00:00 CST (job_id: daily_epic_games_task)
epic-awesome-gamer  | 2025-12-31 22:01:39 | DEBUG       | __main__:deploy:171 | Scheduler is running, send SIGINT or SIGTERM to stop gracefully
^C
root@NUE /opt/epic-awesome-gamer/docker # docker compose down
root@NUE /opt/epic-awesome-gamer/docker # docker compose pull && docker compose up -d
[+] pull 0/1 epic-awesome-gamer       Removed                                                                                                                                             0.3s 
 ⠏ Image ghcr.io/qin2dim/epic-awesome-gamer:latest Pulling                                                                                                                                1.0s 
[+] up 2/2
 ✔ Network epic-awesome-gamer_default Created                                                                                                                                             0.1s 
 ✔ Container epic-awesome-gamer       Created                                                                                                                                             0.1s 
root@NUE /opt/epic-awesome-gamer/docker # docker compose logs -f
epic-awesome-gamer  | 2025-12-31 22:09:25 | DEBUG       | __main__:deploy:108 | Starting deployment with configuration: {
epic-awesome-gamer  |   "GEMINI_API_KEY": "**********",
epic-awesome-gamer  |   "cache_dir": "/app/app/volumes/hcaptcha/.cache",
epic-awesome-gamer  |   "challenge_dir": "/app/app/volumes/hcaptcha/.challenge",
epic-awesome-gamer  |   "captcha_response_dir": "/app/app/volumes/hcaptcha/.captcha",
epic-awesome-gamer  |   "ignore_request_types": [],
epic-awesome-gamer  |   "ignore_request_questions": [
epic-awesome-gamer  |     "Please drag the crossing to complete the lines"
epic-awesome-gamer  |   ],
epic-awesome-gamer  |   "DISABLE_BEZIER_TRAJECTORY": true,
epic-awesome-gamer  |   "EXECUTION_TIMEOUT": 120.0,
epic-awesome-gamer  |   "RESPONSE_TIMEOUT": 30.0,
epic-awesome-gamer  |   "RETRY_ON_FAILURE": true,
epic-awesome-gamer  |   "WAIT_FOR_CHALLENGE_VIEW_TO_RENDER_MS": 1500,
epic-awesome-gamer  |   "CONSTRAINT_RESPONSE_SCHEMA": true,
epic-awesome-gamer  |   "CHALLENGE_CLASSIFIER_MODEL": "gemini-2.0-flash-exp",
epic-awesome-gamer  |   "IMAGE_CLASSIFIER_MODEL": "gemini-2.0-flash-exp",
epic-awesome-gamer  |   "SPATIAL_POINT_REASONER_MODEL": "gemini-2.0-flash-exp",
epic-awesome-gamer  |   "SPATIAL_PATH_REASONER_MODEL": "gemini-2.0-flash-exp",
epic-awesome-gamer  |   "IMAGE_CLASSIFIER_THINKING_BUDGET": 970,
epic-awesome-gamer  |   "SPATIAL_POINT_THINKING_BUDGET": 1387,
epic-awesome-gamer  |   "SPATIAL_PATH_THINKING_BUDGET": 1652,
epic-awesome-gamer  |   "coordinate_grid": {
epic-awesome-gamer  |     "x_line_space_num": 15,
epic-awesome-gamer  |     "y_line_space_num": 20,
epic-awesome-gamer  |     "color": "gray",
epic-awesome-gamer  |     "adaptive_contrast": false
epic-awesome-gamer  |   },
epic-awesome-gamer  |   "enable_challenger_debug": false,
epic-awesome-gamer  |   "EPIC_EMAIL": "[email protected]",
epic-awesome-gamer  |   "EPIC_PASSWORD": "**********",
epic-awesome-gamer  |   "ENABLE_APSCHEDULER": true,
epic-awesome-gamer  |   "TASK_TIMEOUT_SECONDS": 900,
epic-awesome-gamer  |   "REDIS_URL": "redis://redis:6379/0",
epic-awesome-gamer  |   "CELERY_WORKER_CONCURRENCY": 1,
epic-awesome-gamer  |   "CELERY_TASK_TIME_LIMIT": 1200,
epic-awesome-gamer  |   "CELERY_TASK_SOFT_TIME_LIMIT": 900,
epic-awesome-gamer  |   "headless": true
epic-awesome-gamer  | }
epic-awesome-gamer  | 2025-12-31 22:09:25 | DEBUG       | __main__:execute_browser_tasks:55 | Starting Epic Games collection task
epic-awesome-gamer  | 2025-12-31 22:09:27 | DEBUG       | __main__:execute_browser_tasks:69 | Browser initialized successfully
epic-awesome-gamer  | 2025-12-31 22:09:27 | DEBUG       | __main__:execute_browser_tasks:72 | Initiating Epic Games authentication
epic-awesome-gamer  | 2025-12-31 22:09:31 | SUCCESS     | services.epic_authorization_service:invoke:121 | Epic Games is already logged in
epic-awesome-gamer  | 2025-12-31 22:09:31 | DEBUG       | __main__:execute_browser_tasks:75 | Authentication completed
epic-awesome-gamer  | 2025-12-31 22:09:31 | DEBUG       | __main__:execute_browser_tasks:78 | Starting free games collection process
epic-awesome-gamer  | 2025-12-31 22:09:37 | DEBUG       | services.epic_games_service:collect_epic_games:184 | Discover promotion 
epic-awesome-gamer  | {
epic-awesome-gamer  |   "title": "Trine Classic Collection",
epic-awesome-gamer  |   "url": "https://store.epicgames.com/en-US/p/mysterygame2025-14"
epic-awesome-gamer  | }
epic-awesome-gamer  | 2025-12-31 22:10:42 | ERROR       | services.epic_games_service:collect_epic_games:195 | Locator.text_content: Timeout 30000ms exceeded.
epic-awesome-gamer  | Call log:
epic-awesome-gamer  |   - waiting for locator("//aside//button[@data-testid='purchase-cta-button']")
epic-awesome-gamer  | 
epic-awesome-gamer  | Traceback (most recent call last):
epic-awesome-gamer  |   File "/app/app/deploy.py", line 182, in <module>
epic-awesome-gamer  |     asyncio.run(deploy())
epic-awesome-gamer  |   File "/usr/lib/python3.12/asyncio/runners.py", line 194, in run
epic-awesome-gamer  |     return runner.run(main)
epic-awesome-gamer  |   File "/usr/lib/python3.12/asyncio/runners.py", line 118, in run
epic-awesome-gamer  |     return self._loop.run_until_complete(task)
epic-awesome-gamer  |   File "/usr/lib/python3.12/asyncio/base_events.py", line 674, in run_until_complete
epic-awesome-gamer  |     self.run_forever()
epic-awesome-gamer  |   File "/usr/lib/python3.12/asyncio/base_events.py", line 641, in run_forever
epic-awesome-gamer  |     self._run_once()
epic-awesome-gamer  |   File "/usr/lib/python3.12/asyncio/base_events.py", line 1987, in _run_once
epic-awesome-gamer  |     handle._run()
epic-awesome-gamer  |   File "/usr/lib/python3.12/asyncio/events.py", line 88, in _run
epic-awesome-gamer  |     self._context.run(self._callback, *self._args)
epic-awesome-gamer  |   File "/app/app/deploy.py", line 113, in deploy
epic-awesome-gamer  |     await execute_browser_tasks(headless=headless)
epic-awesome-gamer  |   File "/app/app/deploy.py", line 81, in execute_browser_tasks
epic-awesome-gamer  |     await agent.collect_epic_games()
epic-awesome-gamer  | > File "/app/app/services/epic_games_service.py", line 193, in collect_epic_games
epic-awesome-gamer  |     await self.epic_games.collect_weekly_games(game_promotions)
epic-awesome-gamer  |   File "/app/.venv/lib/python3.12/site-packages/tenacity/asyncio/__init__.py", line 189, in async_wrapped
epic-awesome-gamer  |     return await copy(fn, *args, **kwargs)
epic-awesome-gamer  |   File "/app/.venv/lib/python3.12/site-packages/tenacity/asyncio/__init__.py", line 111, in __call__
epic-awesome-gamer  |     do = await self.iter(retry_state=retry_state)
epic-awesome-gamer  |   File "/app/.venv/lib/python3.12/site-packages/tenacity/asyncio/__init__.py", line 153, in iter
epic-awesome-gamer  |     result = await action(retry_state)
epic-awesome-gamer  |   File "/app/.venv/lib/python3.12/site-packages/tenacity/_utils.py", line 99, in inner
epic-awesome-gamer  |     return call(*args, **kwargs)
epic-awesome-gamer  |   File "/app/.venv/lib/python3.12/site-packages/tenacity/__init__.py", line 418, in exc_check
epic-awesome-gamer  |     raise retry_exc.reraise()
epic-awesome-gamer  |   File "/app/.venv/lib/python3.12/site-packages/tenacity/__init__.py", line 185, in reraise
epic-awesome-gamer  |     raise self.last_attempt.result()
epic-awesome-gamer  |   File "/usr/lib/python3.12/concurrent/futures/_base.py", line 449, in result
epic-awesome-gamer  |     return self.__get_result()
epic-awesome-gamer  |   File "/usr/lib/python3.12/concurrent/futures/_base.py", line 401, in __get_result
epic-awesome-gamer  |     raise self._exception
epic-awesome-gamer  |   File "/app/.venv/lib/python3.12/site-packages/tenacity/asyncio/__init__.py", line 114, in __call__
epic-awesome-gamer  |     result = await fn(*args, **kwargs)
epic-awesome-gamer  |   File "/app/app/services/epic_games_service.py", line 374, in collect_weekly_games
epic-awesome-gamer  |     if not await self.add_promotion_to_cart(self.page, urls):
epic-awesome-gamer  |   File "/app/app/services/epic_games_service.py", line 273, in add_promotion_to_cart
epic-awesome-gamer  |     purchase_status = await purchase_btn.text_content()
epic-awesome-gamer  |   File "/app/.venv/lib/python3.12/site-packages/playwright/async_api/_generated.py", line 17603, in text_content
epic-awesome-gamer  |     await self._impl_obj.text_content(timeout=timeout)
epic-awesome-gamer  |   File "/app/.venv/lib/python3.12/site-packages/playwright/_impl/_locator.py", line 630, in text_content
epic-awesome-gamer  |     return await self._frame.text_content(
epic-awesome-gamer  |   File "/app/.venv/lib/python3.12/site-packages/playwright/_impl/_frame.py", line 648, in text_content
epic-awesome-gamer  |     return await self._channel.send(
epic-awesome-gamer  |   File "/app/.venv/lib/python3.12/site-packages/playwright/_impl/_connection.py", line 69, in send
epic-awesome-gamer  |     return await self._connection.wrap_api_call(
epic-awesome-gamer  |   File "/app/.venv/lib/python3.12/site-packages/playwright/_impl/_connection.py", line 558, in wrap_api_call
epic-awesome-gamer  |     raise rewrite_error(error, f"{parsed_st['apiName']}: {error}") from None
epic-awesome-gamer  | playwright._impl._errors.TimeoutError: Locator.text_content: Timeout 30000ms exceeded.
epic-awesome-gamer  | Call log:
epic-awesome-gamer  |   - waiting for locator("//aside//button[@data-testid='purchase-cta-button']")
epic-awesome-gamer  | 
epic-awesome-gamer  | 2025-12-31 22:10:42 | DEBUG       | services.epic_games_service:collect_epic_games:201 | All tasks in the workflow have been completed
epic-awesome-gamer  | 2025-12-31 22:10:42 | DEBUG       | __main__:execute_browser_tasks:82 | Free games collection completed
epic-awesome-gamer  | 2025-12-31 22:10:42 | DEBUG       | __main__:execute_browser_tasks:85 | Cleaning up browser resources
epic-awesome-gamer  | 2025-12-31 22:10:43 | DEBUG       | __main__:execute_browser_tasks:93 | Browser tasks execution finished successfully
epic-awesome-gamer  | 2025-12-31 22:10:43 | DEBUG       | __main__:deploy:160 | Epic Games scheduler started successfully
epic-awesome-gamer  | 2025-12-31 22:10:43 | DEBUG       | __main__:deploy:161 | Current time: 2025-12-31 22:10:43 CST
epic-awesome-gamer  | 2025-12-31 22:10:43 | DEBUG       | __main__:deploy:166 | Next execution scheduled: 2026-01-01 00:30:00 CST (job_id: weekly_epic_games_task)
epic-awesome-gamer  | 2025-12-31 22:10:43 | DEBUG       | __main__:deploy:166 | Next execution scheduled: 2026-01-01 12:00:00 CST (job_id: daily_epic_games_task)
epic-awesome-gamer  | 2025-12-31 22:10:43 | DEBUG       | __main__:deploy:171 | Scheduler is running, send SIGINT or SIGTERM to stop gracefully


^C
root@NUE /opt/epic-awesome-gamer/docker # # 进入容器内部并测试访问网页头部信息
root@NUE /opt/epic-awesome-gamer/docker # docker exec -it epic-awesome-gamer curl -I https://store.epicgames.com/en-US/p/mysterygame2025-14
HTTP/2 403 
date: Wed, 31 Dec 2025 14:37:54 GMT
content-type: text/html; charset=UTF-8
content-length: 7131
accept-ch: Sec-CH-UA-Bitness, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform, Sec-CH-UA, UA-Bitness, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA
cf-mitigated: challenge
critical-ch: Sec-CH-UA-Bitness, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform, Sec-CH-UA, UA-Bitness, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA
cross-origin-embedder-policy: require-corp
cross-origin-opener-policy: same-origin
cross-origin-resource-policy: same-origin
origin-agent-cluster: ?1
permissions-policy: accelerometer=(),browsing-topics=(),camera=(),clipboard-read=(),clipboard-write=(),geolocation=(),gyroscope=(),hid=(),interest-cohort=(),magnetometer=(),microphone=(),payment=(),publickey-credentials-get=(),screen-wake-lock=(),serial=(),sync-xhr=(),usb=()
referrer-policy: same-origin
server-timing: chlray;desc="9b6a84824fa3dbe3"
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
cache-control: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
expires: Thu, 01 Jan 1970 00:00:01 GMT
set-cookie: __cf_bm=7a0l7SqJWOvea4aAIS9UjQ5d3hnJN6h_VuBAcnS5HuU-1767191874-1.0.1.1-O0BJR.XT61TJGL7ZrbH4QjN8QPcob3Jotcz336aRVRJG.wvQ8.JR7P_kepvkQzwrJXtRkgQkWsxH73BzdJy067I3M.PoZkF6WFhkgoP0ws0; path=/; expires=Wed, 31-Dec-25 15:07:54 GMT; domain=.store.epicgames.com; HttpOnly; Secure; SameSite=None
server: cloudflare
cf-ray: 9b6a84824fa3dbe3-FRA
alt-svc: h3=":443"; ma=86400

root@NUE /opt/epic-awesome-gamer/docker # 

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions