爬虫之selenium登录验证码简单网站
打个广告ddddocr乃真神器,用起来太简单了。先用简单验证码网站练习练习。
验证码刷新会变,直接保存也和登录页面上的不同,因此先截图后识别。
直接上代码,不到之处,请大神指正
from selenium import webdriver
import ddddocr
from selenium.webdriver.chrome.service import Service
from PIL import Image
from time import sleep
from webdriver_manager.chrome import ChromeDriverManager
if __name__ == '__main__':
# 1、自动安装对应版本的Webdriver
s = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=s)
# 2、打开指定的网页,设置浏览器全屏化、并截图
driver.get("http://demo.jizhicms.cn/admin.php/Login/index.html")
driver.maximize_window()
sleep(0.5)
driver.save_screenshot('aa.png')
# 3、获取验证码的网页上面的坐标
code_png_lel = driver.find_element_by_id('vercodeimg')
location = code_png_lel.location
print('location', location)
# 4、获取验证码的长宽
size = code_png_lel.size
print('size', size)
# location获取是根据百分之百缩放的,如果有缩放需按比例调整
k = 1
# 图片左上角和右下角的xy坐标
rangle = (
int(location['x']) * k, int(location['y']) * k, int(location['x'] + size['width']) * k,
int(location['y'] + size['height']) * k
)
print('rangle', rangle)
# 5、对全局页面进行截图获取局部验证码
i = Image.open('./aa.png')
# 按照给定xy坐标裁剪
frame = i.crop(rangle)
frame.save('./code.png')
# 6、利用弟弟获取验证码
ocr = ddddocr.DdddOcr(old=True)
with(open("code.png", 'rb')) as g:
image = g.read()
code = ocr.classification(image)
print(code)
# 7、填写账号和验证码(已保存的可不填)
# driver.find_element_by_name("username").send_keys("test")
# driver.find_element_by_name("password").send_keys("123456")
driver.find_element_by_name("vercode").send_keys(code)
sleep(0.2)
# 8、登录
driver.find_element_by_xpath("//form[@class='layui-form']/input").click()
sleep(5)
# 9、关闭浏览器并退出
driver.close() from selenium import webdriver
import ddddocr
from selenium.webdriver.chrome.service import Service
from PIL import Image
from time import sleep
from webdriver_manager.chrome import ChromeDriverManager
if __name__ == '__main__':
# 1、自动安装对应版本的Webdriver
s = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=s)
# 2、打开指定的网页,设置浏览器全屏化、并截图
driver.get("http://demo.jizhicms.cn/admin.php/Login/index.html")
driver.maximize_window()
sleep(0.5)
driver.save_screenshot('aa.png')
# 3、获取验证码的网页上面的坐标
code_png_lel = driver.find_element_by_id('vercodeimg')
# 不用全屏截图,只把验证码所在元素保存为png图片
code_img = code_png_lel.screenshot_as_png
# 6、利用弟弟获取验证码
ocr = ddddocr.DdddOcr(old=True)
code = ocr.classification(code_img)
print(code)
# 7、填写账号和验证码(已保存的可不填)
# driver.find_element_by_name("username").send_keys("test")
# driver.find_element_by_name("password").send_keys("123456")
driver.find_element_by_name("vercode").send_keys(code)
sleep(0.2)
# 8、登录
driver.find_element_by_xpath("//form[@class='layui-form']/input").click()
sleep(5)
# 9、关闭浏览器并退出
driver.close() 18 行- 36行
获取验证码图片元素后,直接截图不就行了吗,需要那么麻烦吗
code_png_lel.screenshot('./code.png')
本帖最后由 txq0211 于 2022-3-28 17:44 编辑
banro512 发表于 2022-3-28 17:26
18 行- 36行
获取验证码图片元素后,直接截图不就行了吗,需要那么麻烦吗
感谢大神,这段我是抄别人的。对selenium不够熟练。
原有的还是不动吧,百度上的都是获取坐标再截图,有些无法理解,求知道的大神指点。
代码简化如下:
from selenium import webdriver
import ddddocr
from selenium.webdriver.chrome.service import Service
from time import sleep
from webdriver_manager.chrome import ChromeDriverManager
if __name__ == '__main__':
# 1、自动安装对应版本的Webdriver
s = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=s)
# 2、打开指定的网页,设置浏览器全屏化、并截图
driver.get("http://demo.jizhicms.cn/admin.php/Login/index.html")
driver.maximize_window()
sleep(0.5)
# 3、获取验证码的网页上面的坐标
code_png_lel = driver.find_element_by_id('vercodeimg')
code_png_lel.screenshot('./code.png')
# 4、利用弟弟带个刀获取验证码
ocr = ddddocr.DdddOcr(old=True)
with(open("code.png", 'rb')) as g:
image = g.read()
code = ocr.classification(image)
print(code)
# 5、填写账号和验证码(已保存的可不填)
# driver.find_element_by_name("username").send_keys("test")
# driver.find_element_by_name("password").send_keys("123456")
driver.find_element_by_name("vercode").send_keys(code)
sleep(0.2)
# 6、登录
driver.find_element_by_xpath("//form[@class='layui-form']/input").click()
sleep(5)
# 7、关闭浏览器并退出
driver.close() 挺好,就是不知道这个dddocr识别效率和准确度怎么样
吾爱有三 发表于 2022-3-28 17:11
挺好,就是不知道这个dddocr识别效率和准确度怎么样
简单的识别率高,复杂点的字母会有错误,有空整个稍微复杂点的识别,不对就刷新验证码循环识别 如果这个ddddocr再加入旋转验证就好了 kof21411 发表于 2022-3-28 17:48
from selenium import webdriver
import ddddocr
from selenium.webdriver.chr ...
哈哈,谢谢,更简洁了 那种汉字、如果是个加法或者减法,可以识别到吗?现在的验证码都千奇百怪了。还有旋转验证。。。。。
页:
[1]
2