多账号体系
以下是我遇到的另外一个问题, 希望得到大佬的一些建议跟帮助
如果我管理的是一批的账号, 我发现 basic_sign_server.py 在启动之后只能为一个账号提供服务。
在启动 flask 时,通过 playwright = sync_playwright().start() ,playwright 只能被全局实例化一次。 导致这个服务只能为一个账号提供参数生成服务。
代码示例如下:
import requests
from xhs import XhsClient
def sign(uri, data=None, a1="", web_session=""):
# 填写自己的 flask 签名服务端口地址
res = requests.post("http://127.0.0.1:5006",
json={"uri": uri, "data": data, "a1": a1, "web_session": web_session})
signs = res.json()
return {
"x-s": signs["x-s"],
"x-t": signs["x-t"]
}
def run(phone, cookie):
# 实例化小红书客户端
xhs_client = XhsClient(cookie, sign=sign)
note_info = xhs_client.get_note_by_id("63db8819000000001a01ead1")
print(note_info)
if __name__ == '__main__':
cookie_1 = '''abRequestId=1; a1=18a4fb739bfi5fv56sf2afk6abyu0vzs146xvegob50000303745; webId=6cca84a5b1403b5bf6c91116bfc6cc0e; gid=yY04iDWqi8ydyY04iDWqj4dkDi32ih2KMiJ0KlDiTK0DvC2878huMh888q8qW428KiSSyd0J; webBuild=3.7.1; xsecappid=xhs-pc-web; web_session=030037a3c2c32f7f4ea717d189234a7620827d; websectiga=cffd9dcea65962b05ab048ac76962acee933d26157113bb213105a116241fa6c; sec_poison_id=c9818550-d81c-48c2-a28e-4d44a15efd38'''
cookie_2 = '''imestamp2=166892735640546fac749a852dbc5491b1bce6bf3116f372b149e46ea126eea; timestamp2.sig=e6AlCiNVwsBa0vp8V7_-NlwkR4FNCYUxm8WvibiTqxg; smidV2=202211201455567df56e0e34e99881500da7e02dd59ddc00bfe477f456168a0; gid.ss=gSMQ9UOnDuZwH2oRGJG6BW6e4grs67TaYpnrW+8Wmd3BXEQ7tNY/0XN700Ebb+IN; xhsTrackerId=73749829-fb1c-4f59-8017-f401f1ef1f95; xhsTrackerId.sig=BfS4OY4--lw8f_3iEF2V5K83Qy8bCKOeIeJG1D2-ZZw; xsecappid=xhs-pc-web; a1=186056ada1a89mvl181dbjb8arvhnl4oy26cw5vxs50000249889; webId=2b0dc450f3eea2de6a1460b70f06983c; gid=yYK82K0ffWvJyYK82K0f0J2hy0Yj6h1yYyfDKCMVDY0FhS28xI14lE888J4jYYj8fY0Y2YK2; gid.sign=IvHoU2YKjJwV3p71N5/Jc1tbZ3k=; abRequestId=2b0dc450f3eea2de6a1460b70f06983c; websectiga=10f9a40ba454a07755a08f27ef8194c53637eba4551cf9751c009d9afb564467; sec_poison_id=d4fa3381-179d-41cc-ac42-555de878e0b8; cache_feeds=[]; web_session=0400698de7e997088ffbd819c4364b0f707729; webBuild=2.11.10'''
accounts = [
{"name": "user1", "phone": "1562604xxxx", "cookie": cookie_2},
{"name": "user2", "phone": "1762973xxxx", "cookie": cookie_1},
]
for account in accounts:
name = account.get("name")
phone = account.get("phone")
cookie = account.get("cookie")
print(name, phone)
run(phone, cookie)
此时只有一个用户的执行正常。
我尝试过 (1) 在后端做一个 session_id: playwright 的映射, 但是由于 playwright 的内部机制,导致全局只能实例化一次(https://crifan.github.io/web_automation_tool_playwright/website/issues_summary/sync_inside_asyncio.html) (2) 用 selenium 代替 playwright 的作用 (3) 每请求一次就重启一次 flask
目前我紧急使用的是第三种办法。想请教下第(2) 种办法是否可替换。
管理多个账号时建议以下两个操作:
- 由于其实只有 a1 参与到签名中,你可以手动将所有的 cookie 设置为同一个 a1 值应该是都可以正确签名的
- 建议修改签名函数,就不要传 web_session cookie 字段到浏览器了,防止浏览器由于频繁切换会话可能会导致容易出现验证码。
可以的,太感谢了!
使用 Flask 签名的流程,是这样的吗?
- 跑docker 服务:
docker run -it -d -p 5005:5005 reajason/xhs-api:latest - 跑server.py:
py example/basic_sign_server.py,会log出一个a1的值; - 将a1值替换usage 的cookie中的a1,然后跑usage:
py example/basic_sign_usage.py
使用 Flask 签名的流程,是这样的吗?
- 跑docker 服务:
docker run -it -d -p 5005:5005 reajason/xhs-api:latest- 跑server.py:
py example/basic_sign_server.py,会log出一个a1的值;- 将a1值替换usage 的cookie中的a1,然后跑usage:
py example/basic_sign_usage.py这是我的报错信息,哪位可以帮忙解答一下?
使用 Flask 签名的流程,是这样的吗?
- 跑docker 服务:
docker run -it -d -p 5005:5005 reajason/xhs-api:latest- 跑server.py:
py example/basic_sign_server.py,会log出一个a1的值;- 将a1值替换usage 的cookie中的a1,然后跑usage:
py example/basic_sign_usage.py这是我的报错信息,哪位可以帮忙解答一下?
你是不是把小红书前端的cookie和创作者的cookie搞混了
