iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python+opencv+selenium如何实现自动化登录邮箱
  • 844
分享到

python+opencv+selenium如何实现自动化登录邮箱

2023-06-20 14:06:48 844人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要为大家展示了“python+OpenCV+selenium如何实现自动化登录邮箱”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python+opencv+selenium如何实现自动

这篇文章主要为大家展示了“python+OpenCV+selenium如何实现自动化登录邮箱”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python+opencv+selenium如何实现自动化登录邮箱”这篇文章吧。

如下:

python+opencv+selenium如何实现自动化登录邮箱
  

在我们做自动化登录时,总会遇到各种奇奇怪怪的验证码,滑块验证码就是其中最常见的一种。若我们的程序自动输入账号密码之后,还需要我们人工去滑动验证码那还能称得上是自动化吗?
那么先给大家说一下我的‘解题步骤'。

使用selenium打开邮箱首页。
2.定位到账号密码框,键入账号密码。
3.获取验证图片,使用opencv处理返回滑块应拖动的距离。
4.创建鼠标事件,模拟拖动滑块完成验证。

  需要解决的问题:

页面元素的定位。
2.文本框和验证码的frame嵌套。
3.opencv处理验证图片缺口图像匹配并返回距离。
4.WEBdriver在网页中使用xpath时如何定位自身元素。
5.原始图片尺寸与在网页中的实际尺寸同比例缩放(距离的缩放)。

  OK,思路清晰上代码!!!

  源代码:

#滑稽研究所出品from selenium.webdriver.common.keys import Keysfrom selenium.webdriver import ActionChainsfrom selenium import webdriverimport requestsimport timeimport cv2#下载图片def download_img(url,filename):    r = requests.get(url)    with open( filename + '.png', 'wb') as f:        # 对于图片类型的通过r.content方式访问响应内容,将响应内容写入yanzheng.png中        f.write(r.content)        print(filename + '下载完成')def get_image():    #为什么这里要定义全局变量?因为driver在函数内,函数运行完毕就会关闭,    #相应的网页也会被关闭,这就是网上很多问为什么网页会自动关闭的原因。    global driver    driver= webdriver.Chrome() #获取浏览器对象    driver.get("https://mail.qq.com/") #加载百度首页    #窗口最大化操作,如果窗口过小,会导致后续拖动滑块时出现视野丢失的问题    driver.maximize_window()    time.sleep(2) #睡眠两秒    driver.find_element_by_xpath('/html/body/div/div[2]/div/div[1]/div/div[1]/div[2]').click()    time.sleep(1)    driver.switch_to.frame('login_frame')    # driver.find_element_by_xpath('//*[@id="switcher_plogin"]').click()    #输入账号密码    input=driver.find_element_by_xpath('//*[@id="u"]')#定位QQ账号框    time.sleep(1)    input.send_keys("zhanghao") #搜索框输入内容    input=driver.find_element_by_xpath('//*[@id="p"]')#定位QQ密码框    input.send_keys("你的密码") #搜索框输入内容    print('账号密码输入完成。')    #这里停顿一下,不然不会显示滑动验证,应该是检测自动化工具的手段。(反爬)    time.sleep(1)    driver.find_element_by_xpath('//*[@id="login_button"]').click()    #注意我们这里又需要跳到验证码的子框(又一个嵌套)    time.sleep(1)    driver.switch_to.frame('tcaptcha_iframe')    #webdriver的定位方法和浏览器xpath不一样,不能直接定位到标签的属性.    #需要首先定位到webelement,之后get到属性!!!!!!!    bk = driver.find_element_by_xpath('//*[@id="slideBg"]').get_attribute('src')    print(bk)    #获取背景和滑块地址,下载到本地。    key = driver.find_element_by_xpath('//*[@id="slideBlock"]').get_attribute('src')    print(bk)    download_img(bk,filename= 'bk')    download_img(key,filename= 'key')    #定滑块    slider = driver.find_element_by_xpath('//*[@id="tcaptcha_drag_thumb"]')    #获取应滑动距离    dis = get_distance()    print(dis)    #滑块部分,没有问题,已完成。    newact =  ActionChains(driver)    newact.click_and_hold(slider).perfORM()    newact.move_by_offset(xoffset=dis-20,yoffset=0).perform()    time.sleep(0.5)    newact.release().perform()#处理得到滑块应移动的距离。def get_distance():    path = 'bk.png'    img = cv2.imread(path)    path = 'key.png'    img2 = cv2.imread(path)    imGContour = img.copy()    print('img.shape:', img.shape)    imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)    imgBlur = cv2.GaussianBlur(imgGray, (3, 3), 1)    imgCanny = cv2.Canny(imgBlur, 400, 500)    imgGray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)    imgBlur2 = cv2.GaussianBlur(imgGray2, (3, 3), 1)    imgCanny2 = cv2.Canny(imgBlur2, 400, 500)    cv2.imshow("O", imgCanny)    # 匹配拼图    result = cv2.matchTemplate(imgCanny, imgCanny2, cv2.TM_CCOEFF_NORMED)    # 归一化    cv2.normalize(result, result, 0, 1, cv2.NORM_MINMAX, -1)    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)    print('min_loc:', min_loc)    print('max_loc:', max_loc)    # 匹配后结果画圈    cv2.rectangle(imgContour, max_loc, (max_loc[0] + 135, max_loc[1] + 135), (0, 0, 255), 2)    # 原图为680*390 在浏览器resize为280*161,这里我们只用到宽。所以需要进行同比例缩放。    res = min_loc[0] / (680 / 280)    cv2.imshow("Canny Image", imgContour)    #这里不可以用0,因为图片窗口会一直显示,程序卡住无法return出距离给滑块功能使用。    cv2.waiTKEy(100)    print('应滑动距离获取成功。')    return resif __name__ == '__main__':    get_image()

  下面是运行结果,两种不同的验证码背景图都可以正确识别出来。红框为代码识别缺口之后标记的红框

python+opencv+selenium如何实现自动化登录邮箱

python+opencv+selenium如何实现自动化登录邮箱

  可以看到在跳出验证码之后,我们的程序正确的识别到了缺口的位置,并且正确的返回了缩放后的距离。模拟的鼠标事件完美的把滑块拖动到了缺口的位置。提示我们验证成功,不过我们并没有给代码正确的账号和密码因此会提醒我们账号或密码错误。大家只需填入正确的账号密码即可成功登入。非常的好用~
  需要注意一个问题,就是要保持网络的稳定,不要有太大波动。长时间加载不出来页面元素,就会出现获取不到页面元素的报错。

以上是“python+opencv+selenium如何实现自动化登录邮箱”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网Python频道!

--结束END--

本文标题: python+opencv+selenium如何实现自动化登录邮箱

本文链接: https://www.lsjlt.com/news/297148.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作