Bumble Client
Session policy
- - Always start from
https://bumble.com/app. - Reuse the existing
bumble session whenever possible. - If Bumble is already authenticated, do not run the auth flow again.
- If you gettin
get-started or auth pages then start "Auth flow" - Re-authenticate only when Bumble is clearly on
get-started, auth, or SMS-confirmation pages. - For non-auth actions, resume the stored session only; if Bumble is logged out, return an error instead of triggering auth.
- If Bumble is on a CAPTCHA screen, do not treat that as a normal logged-in state.
- If Bumble reaches a passkey screen after SMS verification, only Not Now may be used automatically; do not create or enroll a passkey automatically.
- Do not log out unless there is a significant reason.
- Use random 1–4 sec pauses between actions.
- Set location to San Francisco (37.79, -122.42) after session start.
Local debug / inspection
CODEBLOCK0
Match selection policy
- - Always switch matches from the left conversation bar.
- Do not assume the click worked just because the action returned 200.
- Verify that the active profile / conversation on the right changed to the requested match name.
- If the requested name is wrong or the active profile name does not match exactly, return an error instead of silently using the previously open match.
Auth flow
Only when on get-started or auth page:
- 1. Tap "Continue with other methods" — selectors:
div.other-methods-button, INLINECODE7 - Tap "Use cell phone number" — selectors:
span.action.text-break-words, INLINECODE9 - Ask the user to provide their phone number, then type that number (national digits; country is chosen in the UI) into the digits field and pass the same number on the CLI
- Tap "Continue"
- Stop on the SMS confirmation page and wait for a code
CODEBLOCK1
SMS code step
Only when Bumble is already on the confirm-phone page:
CODEBLOCK2
Current behavior:
- - First tries the working fallback: type the full 6-digit code into the first OTP box.
- Prefer focusing the first OTP box once and typing the whole code without selecting each field individually.
- Falls back to per-digit entry if needed.
- Only reports success if Bumble actually leaves the confirm-phone page.
- If the SMS code is accepted but Bumble moves to a CAPTCHA challenge, return:
-
state: "captcha_challenge"
-
sms_code_accepted: true
- an error saying manual CAPTCHA completion is required
- - If the SMS code is accepted and Bumble moves to
/registration/passkey, the client taps Not Now (skip for now). Do not tap Create a passkey or complete passkey enrollment automatically. open_connections also attempts the same skip if a stored session resumes on that screen.
Messages
CODEBLOCK3
- - Returns JSON.
- Includes
author for each message (me / them when HTML parsing succeeds). - Should not trigger auth automatically.
Send message
CODEBLOCK4
- - Opens the requested match.
- Verifies Bumble accepted the draft before sending.
- Sends using the actual code path in
bumble_client.py:
- resolve send button bounds
- tap/click by coordinates at the button center
- fall back to accessibility-ref click only if needed
- - Verifies the sent message appears in the visible thread before reporting success.
Profile photos
CODEBLOCK5
- - Opens the requested match and verifies the right-side active profile name matches exactly.
- Taps the right-side profile photo area.
- Performs a best-effort photo advance/tap loop.
- Extracts unique Bumble CDN photo URLs from the active profile HTML.
- Downloads the photos into the provided directory.
- Resets back to the normal match thread view after export.
Bumble 客户端
会话策略
- - 始终从 https://bumble.com/app 开始。
- 尽可能重用现有的 bumble 会话。
- 如果 Bumble 已经通过身份验证,不要再次运行身份验证流程。
- 如果遇到 get-started 或 auth 页面,则启动身份验证流程。
- 仅当 Bumble 明确处于 get-started、auth 或短信确认页面时,才重新进行身份验证。
- 对于非身份验证操作,仅恢复已存储的会话;如果 Bumble 已登出,则返回错误而不是触发身份验证。
- 如果 Bumble 处于 CAPTCHA 验证码屏幕,不要将其视为正常的登录状态。
- 如果 Bumble 在短信验证后到达密钥屏幕,只能自动使用稍后再说;不要自动创建或注册密钥。
- 除非有重大原因,不要登出。
- 在操作之间随机暂停 1-4 秒。
- 会话开始后将位置设置为旧金山(37.79, -122.42)。
本地调试/检查
bash
python scripts/bumble_client.py state # 返回 JSON
python scripts/bumble_client.py debug
python scripts/bumble_client.py matches # JSON: matches[{name, expired}], expired true/false/null, counts
python scripts/bumble_client.py likes # JSON: 可见的喜欢以及 Beeline 计数/高级信号(可用时)
python scripts/bumble_client.py messages Kritika # 返回包含作者字段的 JSON
python scripts/bumble_client.py send Kritika 消息文本
python scripts/bumble_client.py photos Kritika /绝对路径/输出目录
匹配选择策略
- - 始终从左侧对话栏切换匹配。
- 不要仅仅因为操作返回 200 就认为点击成功。
- 验证右侧的活动个人资料/对话是否已更改为请求的匹配名称。
- 如果请求的名称错误或活动个人资料名称不完全匹配,则返回错误,而不是静默使用先前打开的匹配。
身份验证流程
仅在处于 get-started 或 auth 页面时:
- 1. 点击使用其他方法继续 — 选择器:div.other-methods-button、span.other-methods-button-text
- 点击使用手机号码 — 选择器:span.action.text-break-words、button.primary.button--transparent span.action
- 要求用户提供电话号码,然后将该号码(国内号码;国家/地区在 UI 中选择)输入到数字字段中,并在 CLI 上传递相同的号码
- 点击继续
- 停在短信确认页面并等待验证码
bash
python scripts/bumble_client.py auth <用户电话号码>
短信验证码步骤
仅当 Bumble 已经在确认手机页面时:
bash
python scripts/bumbleclient.py smscode 233596
当前行为:
- - 首先尝试有效的备用方案:将完整的 6 位验证码输入到第一个 OTP 框中。
- 优先聚焦第一个 OTP 框一次,然后输入整个验证码,无需单独选择每个字段。
- 如果需要,则回退到逐位输入。
- 仅当 Bumble 实际离开确认手机页面时才报告成功。
- 如果短信验证码被接受但 Bumble 进入 CAPTCHA 验证挑战,则返回:
- state: captcha_challenge
- sms
codeaccepted: true
- 一个错误,说明需要手动完成 CAPTCHA 验证
- - 如果短信验证码被接受且 Bumble 进入 /registration/passkey,客户端点击稍后再说(暂时跳过)。不要点击创建密钥或自动完成密钥注册。如果存储的会话在该屏幕上恢复,open_connections 也会尝试相同的跳过操作。
消息
bash
python scripts/bumble_client.py messages Kritika
- - 返回 JSON。
- 包含每条消息的 author(当 HTML 解析成功时为 me / them)。
- 不应自动触发身份验证。
发送消息
bash
python scripts/bumble_client.py send Kritika 消息文本
- - 打开请求的匹配。
- 在发送前验证 Bumble 接受了草稿。
- 使用 bumble_client.py 中的实际代码路径发送:
- 解析发送按钮边界
- 通过按钮中心坐标点击
- 仅在需要时回退到无障碍点击
- - 在报告成功前验证发送的消息出现在可见的对话线程中。
个人资料照片
bash
python scripts/bumble_client.py photos Anya /绝对路径/输出目录
- - 打开请求的匹配并验证右侧活动个人资料名称完全匹配。
- 点击右侧个人资料照片区域。
- 尽最大努力执行照片前进/点击循环。
- 从活动个人资料 HTML 中提取唯一的 Bumble CDN 照片 URL。
- 将照片下载到提供的目录中。
- 导出后重置回正常的匹配对话线程视图。