headless 环境下所有浏览器命令因首页 domcontentloaded 等待超时失败

オープン 初心者向け
#15 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
68/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
静か
技術スタック
python
領域
cli

調査の方向性

client.py の XhsClient.start() とその _goto 呼び出しから始め、続いて headless な xhs whoami または xhs feed の実行で失敗を再現します。既存の timeout と wait_until の動作を確認し、選択した変更によって、ブラウザーを起動するコマンドがホームページへのナビゲーションをタイムアウトさせずに完了できることを検証します。

索引モデルが issue の本文から書いたものです。

説明

Bug: headless 环境下所有浏览器命令因首页 domcontentloaded 等待超时失败

Describe the bug

在 headless(无头)运行环境中,xhs whoami / xhs feed / xhs search 等所有需要启动浏览器的命令都会在 client.start() 阶段失败:

❌ Failed to get profile: Page.goto: Timeout 20000ms exceeded.
Call log:
  - navigating to "https://www.xiaohongshu.com/", waiting until "domcontentloaded"

根因在 client.pystart()

self._goto(
    "https://www.xiaohongshu.com",
    timeout=20000,
    wait_min=1,
    wait_max=2,
    context="establishing browser session",
)

默认 wait_until="domcontentloaded" 且超时固定 20s。在小红书首页 + headless 冷启动场景下,domcontentloaded 经常需要 10~20s 甚至更久,加上 camoufox 冷启动开销,很容易撞上 20s 上限。

To Reproduce

  1. 无头环境安装 xhs-cli 0.1.4 并完成登录
  2. 运行 xhs whoamixhs feed
  3. 观察 Page.goto: Timeout 20000ms exceeded

Expected behavior

  • 首页初始化应该用更宽松的超时(例如 40s+),或者
  • 允许通过环境变量 / CLI 参数 / 配置文件覆盖 timeoutwait_until

实测数据(有头/无头对照)

方式 wait_until 耗时
camoufox 手动导航 https://www.xiaohongshu.com/ commit ~1.2s
camoufox 手动导航 https://www.xiaohongshu.com/ domcontentloaded ~9.1s

站点本身连通性正常(HTTP 302,connect <0.1s),问题在等待策略而非网络。

Suggested fix

  1. 最简:start() 中把超时从 20000 提高到 40000;
  2. 更好:XhsClient.__init__(timeout=...) 支持传入或读取环境变量(如 XHS_CLI_NAV_TIMEOUT / XHS_CLI_WAIT_UNTIL),默认值保持 20000/domcontentloaded 以兼容现有行为。

Environment

  • xhs-cli: 0.1.4
  • OS: Debian 13 (Linux)
  • Python: 3.11
  • Browser: camoufox headless
主要言語
Python
スター
658
フォーク
68
PR マージ指標
30日以内にマージされた PR はありません

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

jackwener/xhs-cli のほかの issue

jackwener/xhs-cli の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。