在Python中保持会话活跃

0 投票
1 回答
2021 浏览
提问于 2025-04-18 18:50

我正在尝试处理验证码图片。我在本地服务器上有一个 capatcha.php 文件,它会生成一张图片,然后把这张图片放到表单里。

下面是我的 Python 代码,用来获取这张图片,提取里面的文字,然后把这些文字发送回表单。最后,我会把生成的表单保存为 HTML 文件。

import os
import requests

p = requests.session()
q = p.get('http://localhost/dhiraagu/Capatcha.php')
with open('data/a.png', 'wb') as f:
    f.write(q.content)
os.system("tesseract C:\\Users\\Aiman\\Desktop\\Wataniya\\data\\a.png C:\\Users\\Aiman\\Desktop\\Wataniya\\data\\a")
with open("data\\a.txt") as cap:
    capData = cap.read()
print("Capatcha line:"+capData)
num = input("Please enter the number :")
payload = {
    'Code': capData,
    'q': num
}

url = "http://localhost/dhiraagu/index.php"
r = p.post(url, data=payload)


with open("data\\log.html", "w") as file:
    log = file.write(r.text)

不过现在这个代码没有正常工作。我看不出哪里有问题。:confused:

编辑 我通过把代码放在 with requests.session() as s: 这一行里面解决了这个问题 :D

如果我不发送 'header',会有什么问题吗?...

1 个回答

0

你需要保存 cookies,然后把它们发送给服务器。 我有一个获取 cookies 的例子,但把这个扩展到发送 cookies 也不难:

>>> import urllib.request
>>> import http.cookiejar
>>> cj = http.cookiejar.CookieJar()
>>> opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
>>> urllib.request.install_opener(opener)
>>> reply = urllib.request.urlopen("http://google.com")
>>> for cookie in cj:
...     print(cookie)

这就是你的 cookies :)

撰写回答