Python|验证码登录最简单的方法 | Python技能树征题
题目:利用selenium来登录 (乐业天空),并模拟验证码登录。
思路:需要将验证码进行截图分析验证码信息,并利用识图取字的模块(pytesseract)来识别验证码,需要注意的是其识别度不高一些简单验证码来识别是可以的。
答案:
# -*- coding: UTF-8 -*-from selenium import webdriver
import time
import re
import pytesseract
from PIL import Imagedef get_code(temp_driver):
temp_driver.maximize_window()
temp_driver.save_screenshot("./screen_code.png")
# img_lo = temp_driver.find_element_by_id("img_code")
# img_location = img_lo.location
# 我这里直接写要截图中验证码的大小
img_size = {"width": 150, "height": 36}
# 截图下来的验证码出于的位置,直接获取该元素的位置不准确
img_location = {"x": 653, "y": 404}
# print(img_size)
tangle = (img_location['x'], img_location['y'],
img_location['x'] + img_size['width'],
img_location['y'] + img_size['height'])
# print(tangle)
img = Image.open("./screen_code.png")
# 在screen_code.png图片上 截取验证码图片
frame = img.crop(tangle)
# 保存截取的验证码图
frame.save("./code.png")
image = Image.open("./code.png")
# 识别验证码的字
code = pytesseract.image_to_string(image)
code = re.sub(r"\s", "", code)
print("识别出的验证码内容", code)
return codedef main():
while True:
url = "http://www.myjobsky.com/Account/Login"
driver = webdriver.Chrome()
driver.get(url)
# content = driver.page_source
# print(content)
phone_number = driver.find_element_by_name("accountName")
phone_number.click()
# 用户号码
phone_number.send_keys("18*******48")
password = driver.find_element_by_name("accountPwd")
time.sleep(1)
password.click()
# 用户密码
password.send_keys("******")
lo_code = get_code(driver)
login_code = driver.find_element_by_name("picCode")
time.sleep(1)
login_code.click()
login_code.send_keys(lo_code)
time.sleep(1)
login = driver.find_element_by_class_name("btn")
login.click()
try:
time.sleep(5)
# 保存登录成功的截图
driver.save_screenshot("./login_success.png")
except:
pass
else:
driver.quit()
breakif __name__ == '__main__':
main()
运行结果:
【Python|验证码登录最简单的方法 | Python技能树征题】
文章图片
一共尝试了三次后识别出来正确的验证码。
文章图片
文章图片
login_success.png
文章图片
推荐阅读
- CVE-2020-16898|CVE-2020-16898 TCP/IP远程代码执行漏洞
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- Python基础|Python基础 - 练习1
- 不废话,代码实践带你掌握|不废话,代码实践带你掌握 强缓存、协商缓存!
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- Python(pathlib模块)
- 工具|后天就是七夕节,你准备好了吗(送上几个七夕代码,展示你技能的时候到了!)