食用前准备
python 3.10.10 #二维码的库ddddocr 需要
库
1
2
|
import time import ddddocr |
源码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
# import threading # 导入threading模块 # from Feishu_SendMsg import * # Identification verification code import time import ddddocr interval = 100 * 60 # def delayCall(): # 定义方法 # SendMsg("选题 快快快!!!") # timer=threading.Timer(interval,delayCall) # 每秒运行 # timer.start() # 执行方法 # if __name__ == '__main__': # # t1=threading.Timer(interval,function=delayCall) # 创建定时器 # t1.start() # 开始执行线程 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.keys import Keys # SendMsg("自动填表单") options = webdriver.ChromeOptions() options.add_argument( '--enable-automation' ) options.add_argument( '--no-sandbox' ) options.add_argument( '--disable-extensions' ) options.add_argument( '--start-maximized' ) options.add_argument( '--disable-infobars' ) prefs = { "profile.default_content_setting_values.autocomplete_enabled" : 2 } options.add_experimental_option( "prefs" , prefs) # SendMsg("创建 Chrome 浏览器实例") # 创建 Chrome 浏览器实例 browser = webdriver.Chrome(options = options) # SendMsg("打开网页") browser.get( 'www.tttttttt.com' ) # SendMsg("找到账号和密码框元素并输入指定字符串") username = browser.find_element( "name" , "username" ) password = browser.find_element( "name" , "userpass" ) usercode = browser.find_element( "name" , "usercode" ) img_verifycode = browser.find_element( "id" , "img_verifycode" ) # SendMsg("自动填充账号密码") username.send_keys( "11111" ) password.send_keys( "11111" ) verifycodeBase64 = img_verifycode.screenshot_as_base64 ocr = ddddocr.DdddOcr() res = ocr.classification(verifycodeBase64) usercode.send_keys(res) # SendMsg(f"识别并填写验证码: {res}") # SendMsg("提交表单") password.send_keys(Keys.RETURN) # SendMsg("登陆: 提交表单") |
知识点补充
下面为大家介绍一下文中用到的ddddocr库的相关使用吧
识别验证码的python 库有很多,用起来也并不简单,ddddocr (带带弟弟ocr)库是一个简单实用的识别验证码的库,推荐给大家
ddddocr具体使用方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
import os import ddddocr from time import sleep from PIL import Image from selenium import webdriver from selenium.webdriver.common.by import By class GetVerificationCode: def __init__( self ): self .res = None url = '要登录的地址' self .driver = webdriver.Chrome() self .driver.maximize_window() # 将浏览器最大化 self .driver.get(url) # 获取验证码信息 def getVerification( self ): # 获取当前文件的位置、并获取保存截屏的位置 current_location = os.path.dirname(__file__) screenshot_path = os.path.join(current_location, ".." , "VerificationCode" ) # 截取当前网页并放到自定义目录下,并命名为printscreen,该截图中有我们需要的验证码 sleep( 1 ) self .driver.save_screenshot(screenshot_path + '//' + 'printscreen.png' ) sleep( 1 ) # 定位验证码 imgelement = self .driver.find_element(By.XPATH, '验证码图片的Xpath定位' ) # 获取验证码x,y轴坐标 location = imgelement.location # 获取验证码的长宽 size = imgelement.size # 写成我们需要截取的位置坐标 rangle = ( int (location[ 'x' ] + 430 ), int (location[ 'y' ] + 200 ), int (location[ 'x' ] + size[ 'width' ] + 530 ), int (location[ 'y' ] + size[ 'height' ] + 250 )) # 打开截图 i = Image. open (screenshot_path + '//' + 'printscreen.png' ) # 使用Image的crop函数,从截图中再次截取我们需要的区域 fimg = i.crop(rangle) fimg = fimg.convert( 'RGB' ) # 保存我们截下来的验证码图片,并读取验证码内容 fimg.save(screenshot_path + '//' + 'code.png' ) ocr = ddddocr.DdddOcr() with open (screenshot_path + '//' + 'code.png' , 'rb' ) as f: img_bytes = f.read() self .res = ocr.classification(img_bytes) print ( '识别出的验证码为:' + self .res) # 判断验证码错误时的提示信息是否存在 def isElementPresent( self , by, value): try : element = self .driver.find_element(by = by, value = value) except NoSuchElementException: pass # 发生了NoSuchElementException异常,说明页面中未找到该元素,返回False return False else : # 没有发生异常,表示在页面中找到了该元素,返回True return True # 登录 def login( self ): self .getVerification() self .driver.find_element(By.XPATH, '用户名输入框Xpath定位' ).send_keys( '用户名' ) self .driver.find_element(By.XPATH, '密码输入框Xpath定位' ).send_keys( '密码' ) self .driver.find_element(By.XPATH, '验证码输入框Xpath定位' ).send_keys( self .res) sleep( 1 ) self .driver.find_element(By.XPATH, '登录按钮Xpath定位' ).click() sleep( 2 ) isFlag = True while isFlag: try : isPresent = self .isElementPresent(By.XPATH, '验证码错误时的提示信息Xpath定位' ) if isPresent is True : codeText = self .driver.find_element(By.XPATH, '验证码错误时的提示信息Xpath定位' ).text if codeText = = "验证码不正确" : self .getVerification() sleep( 2 ) self .driver.find_element(By.XPATH, '验证码输入框Xpath定位' ).clear() sleep( 1 ) self .driver.find_element(By.XPATH, '验证码输入框Xpath定位' ).send_keys( self .res) sleep( 1 ) self .driver.find_element(By.XPATH, '登录按钮Xpath定位' ).click() sleep( 2 ) tips = self .driver.find_element(By.XPATH, '未输入验证码时的提示信息Xpath定位' ).text if tips = = "请输入验证码" : self .getVerification() sleep( 2 ) self .driver.find_element(By.XPATH, '验证码输入框Xpath定位' ).click() sleep( 1 ) self .driver.find_element(By.XPATH, '验证码输入框Xpath定位' ).send_keys( self .res) sleep( 1 ) self .driver.find_element(By.XPATH, '登录按钮Xpath定位' ).click() sleep( 2 ) continue else : print ( "验证码正确,登录成功!" ) except NoSuchElementException: pass else : isFlag = False sleep( 5 ) self .driver.quit() if __name__ = = '__main__' : GetVerificationCode().login() |
识别结果
到此这篇关于Python实现获取网页内容及自动填表单与登录功能的文章就介绍到这了,更多相关Python获取网页内容内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/qq_39162566/article/details/129707575