这个验证码逻辑有什么问题?

What's wrong with the logic of this captcha?

首先非常抱歉标题中没有清楚地解释问题。那么让我们开始吧;

我需要 this编程方式 方式下载验证码图像。

import grab, requests, urllib

root_url = 'https://e-okul.meb.gov.tr/'
g = grab.Grab()
g.go(root_url)
e = g.doc.select('//*[@id="image1"]')
captcha_url = root_url + e.attr('src')
img = urllib.request.urlopen(captcha_url)
localFile = open('captcha.jpg', 'wb')
localFile.write(img.read())
localFile.close()

And the result is this.

当我用众所周知的方式手动下载图像时将图像另存为..

没有问题。

是否有机会以我实际需要的方式下载此验证码?

验证码图像依赖于 cookie 来填充图像上显示的值。

您应该使用与加载主页相同的 Grab 对象来下载验证码图像。

试试这个:

import grab, requests, urllib

root_url = 'https://e-okul.meb.gov.tr/'
g = grab.Grab()
g.go(root_url)
e = g.doc.select('//*[@id="image1"]')
captcha_url = root_url + e.attr('src')
resp = g.go(captcha_url)
localFile = open('captcha.jpg', 'wb')
localFile.write(resp.body)
localFile.close()

它为我生成了一个包含正确字符的文件。

更多 pythonic 文件写入:

import grab, requests, urllib

root_url = 'https://e-okul.meb.gov.tr/'
g = grab.Grab()
g.go(root_url)
e = g.doc.select('//*[@id="image1"]')
captcha_url = root_url + e.attr('src')
resp = g.go(captcha_url)

with open('captcha.jpg', 'wb') as localFile
    localFile.write(resp.body)