一、识别图片验证码
1.代码实现
#验证码图片验证 import ddddocr #打开图片 f=open('yzm.jpg',mode='rb') img=f.read() #实例化对象 ocr=ddddocr.DdddOcr() result=ocr.classification(img) print(result)
2.步骤
I 导入ddddor库
II 打开验证码图片
III 实例化ddddor对象,命名为ocr
IV 使用ocr.classification(img)识别图片上的验证码
二、识别滑动验证码&点选验证码
这里拿携程旅行官网举例
1.代码实现
""" 滑动验证 """ import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver import ActionChains from chaojiying import Chaojiying_Client driver=webdriver.Edge() driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",{ "source":"""Object.defineProperty(navigator,'webdriver',{get:() => undefined})"""}) driver.get('https://passport.ctrip.com/user/reg/home') time.sleep(1) driver.find_element(By.XPATH,'//*[@id="agr_pop"]/div[3]/a[2]').click() time.sleep(1) #xpath定位 driver.find_element(By.XPATH,'//*[@id="mobilephone"]').send_keys('#这里输入自己的手机号') time.sleep(1) #获得滑块需要滑动的距离和定位滑块,h是滑块,l是滑块需要走的距离 h=driver.find_element(By.XPATH,'//*[@id="slideCode"]/div[1]/div[2]/div/i[1]') l=driver.find_element(By.XPATH,'//*[@id="slideCode"]/div[1]/div[4]/span') #print(l.size['width']) #在浏览器上的动作 action=ActionChains(driver) #对滑块的行为,按住并执行(perform) action.click_and_hold(h).perform() #让动作位移 action.move_by_offset(l.size['width'],l.size['height']) action.release() time.sleep(1) """ 点选验证 """ img=driver.find_element(By.XPATH,'//*[@id="slideCode-choose"]/div[2]/div[3]/img') time.sleep(1) img.screenshot('yzm.png') im=open('yzm.png','rb').read() chaojiying=Chaojiying_Client('超级鹰账号','密码','96001') pic_str=chaojiying.PostPic(im,9004)['pic_str'] print(pic_str) for i in pic_str.split('|'): x=i.split(',')[0] y = i.split(',')[1] action=ActionChains(driver) action.move_to_element_with_offset(img,int(x),int(y)).click() input()
2.步骤
I 准备工作:导入selenium库,注册超级鹰,下面是超级鹰链接,
https://www.chaojiying.com/
注册好账号后,在下面链接下,下载超级鹰图像识别python语言demo,解压其中的py文件到自己的python工程中,并导入
https://www.chaojiying.com/api-14.html
II 打开网站,driver=webdriver.Edge(),这里用的Edge浏览器。也可以用谷歌浏览器,driver=webdriver.Chrome()
III 链接到携程旅行,driver.get('https://passport.ctrip.com/user/reg/home')
IV 后面需要点击携程旅游的同意按钮,但是程序运行的太快可能还没加载出来同意按钮,会报错无法找到该按钮,所以需要导入time库,延迟1秒运行time.sleep(1),后面time.sleep(1)都是这个道理,就不过多赘述
V 点击携程旅游的同意按钮,driver.find_element(By.XPATH,'//*[@id="agr_pop"]/div[3]/a[2]').click(),这里运用的是xpath定位,也可以用css定位
VI 按按钮后,需要输入自己的手机号,driver.find_element(By.XPATH,'//*[@id="mobilephone"]').send_keys('#这里输入自己的手机号'),也可以用css定位driver.find_element(By.ID,'fm-login-id').send_keys('手机号')
VII 滑块验证
(1)定位滑块,h=driver.find_element(By.XPATH,'//*[@id="slideCode"]/div[1]/div[2]/div/i[1]'),h就代表这个滑块。
(2)后面要拖动滑块移动,所以需要获取滑块需要移动的距离。l=driver.find_element(By.XPATH,'//*[@id="slideCode"]/div[1]/div[4]/span'),因为滑块是有高度的,l.size['width'],l.size['height']分别代表滑块水平移动的距离和滑块的高度
(3)要移动滑块,申请动作请求action=ActionChains(driver)
(4)模拟滑块移动的过程,按住滑块->拖动滑块一定距离->松开滑块
(5)按住滑块:action.click_and_hold(h).perform()
(6)移动滑块:action.move_by_offset(l.size['width'],l.size['height']),l.size['width'],l.size['height']分别代表滑块水平移动的距离和滑块的高度
(7)松开滑块:action.release()
VIII 点选验证
(1) 定位需要点选的图片,img=driver.find_element(By.XPATH,'//*[@id="slideCode-choose"]/div[2]/div[3]/img')
(2) 剪切保存下来,img.screenshot('yzm.png')
(3) 打开图片,im=open('yzm.png','rb').read()
(4) 链接超级鹰平台,chaojiying=Chaojiying_Client('超级鹰账号','密码','96001')
(5)超级鹰识别:pic_str=chaojiying.PostPic(im,9004)['pic_str']
(6) 取出识别出的文字并点击
for i in pic_str.split('|'):
x=i.split(',')[0]
y = i.split(',')[1]
action=ActionChains(driver)
action.move_to_element_with_offset(img,int(x),int(y)).click()