我有一个简单的机器人,它用cookies登录到一个站点,检查一个项目的价格,如果这个价格符合我设置的价格,它就会购买该项目。你知道吗
我正在寻找方法来提高这个机器人的速度。我真的不知道多重处理是否会使这个机器人在这种情况下更快。你知道吗
我也在寻找方法,使之更有效,如果有的话。你知道吗
session = requests.session()
session.cookies["cookie"] = ""
log_in = session.get("https://www.example.com")
if log_in.status_code == 200:
print("Logged In")
else:
raise ValueError("Invalid Cookie")
crsf_token = ""
def token():
global crsf_token
while True:
crsf_token = re.search(r"<script>XsrfToken.setToken\('(.*?)'\);</script>", session.get('https://www.example.com').text).group(1)
time.sleep(5)
def _cthread():
while True:
try:
req = session.get(f"https://www.example.com/productID")
if req.status_code == 429:
time.sleep(5)
continue
for i in req.json()["data"]["Sellers"]:
if i["Price"] <= 300:
session.post(f'https://www.example.com&expectedPrice={i["Price"]}&expectedSellerID={i["SellerId"]}&userAssetID={i["UserAssetId"]}', headers={"X-CSRF-TOKEN": crsf_token})
except requests.urllib3.exceptions.ConnectTimeoutError as E:
pass
while True:
threading.Thread(target=_cthread).start()
threading.Thread(target=token).start()
我没有得到太多的成功,但它现在确实工作。你知道吗
尝试从函数
token()
&;_cthread()
中删除while True
假设您没有带宽限制,并且站点不会一次关闭太多提交的
POST
,您可能会从线程化post
调用中获得一些好处,更改:收件人:
将以下导入添加到文件顶部:
为了避免产生过多的线程,可以在该函数的循环外创建
pool
,而不是仅在allposts
非空时按需创建它。你知道吗我还建议从代码的顶层删除
while True:
;token
和_cthread
都已经是无限循环了,所以拥有这两个循环意味着产生无限多的线程,每个线程永远运行,而实际上只需要两个持久线程。你知道吗相关问题 更多 >
编程相关推荐