QQ邮箱登录很可能需要拖动滑块进行验证,这里当做练习selenium,实现模拟拖动滑块

import sys
import time
import cv2
import os
import requests
import random
import numpy as np
from PIL import Image as Im
from selenium import webdriver
from selenium.webdriver import ActionChainsclass QQEmail(object):def __init__(self, user, pwd):self.root = sys.path[0] + "/pic/"self.driver = webdriver.Firefox()self.user = user  # 用户名self.pwd = pwd  # 密码def login_email(self):login_url = "https://mail.qq.com"time.sleep(2)self.driver.get(login_url)time.sleep(2)self.driver.switch_to.frame("login_frame")try:self.driver.find_element_by_id("switcher_plogin").click()except Exception as e:print(e)time.sleep(1)u_input = self.driver.find_element_by_id("u")u_input.clear()u_input.send_keys(self.user)time.sleep(1)p_input = self.driver.find_element_by_id("p")p_input.clear()p_input.send_keys(self.pwd)time.sleep(1)self.driver.find_element_by_id("login_button").click()time.sleep(2)if "tcaptcha_iframe" in self.driver.page_source:self.driver.switch_to.frame("tcaptcha_iframe")if "拖动下方滑块完成拼图" in self.driver.page_source:print("拖动下方滑块完成拼图")self.verification_code(23)else:print("不需要验证码,直接登录")def download_img(self, url, pic_type):path = self.root + pic_type + '.png'try:if not os.path.exists(self.root):os.makedirs(self.root)res = requests.get(url)with open(path, "wb") as f:f.write(res.content)return f.nameexcept Exception as e:print(e)self.download_img(url, pic_type)def get_distance(self, small_url, big_url):s_img = self.download_img(small_url, 'small')time.sleep(2)b_img = self.download_img(big_url, 'big')target = cv2.imread(s_img, 0)template = cv2.imread(b_img, 0)w, h = target.shape[::-1]temp = self.root + 'temp.jpg'targ = self.root + 'targ.jpg'cv2.imwrite(temp, template)cv2.imwrite(targ, target)target = cv2.imread(targ)target = cv2.cvtColor(target, cv2.COLOR_BGR2GRAY)target = abs(255 - target)cv2.imwrite(targ, target)target = cv2.imread(targ)template = cv2.imread(temp)result = cv2.matchTemplate(target, template, cv2.TM_CCOEFF_NORMED)x, y = np.unravel_index(result.argmax(), result.shape)image = Im.open(b_img)xy = (y + 20, x + 20, y + w - 20, x + h - 20)imagecrop = image.crop(xy)imagecrop.save(self.root + "/new_image.jpg")return ydef verification_code(self, offset):self.driver.switch_to.default_content()self.driver.switch_to.frame('login_frame')self.driver.switch_to.frame(self.driver.find_element_by_id("tcaptcha_iframe"))self.driver.find_element_by_id('e_reload').click()small_url = self.driver.find_element_by_id('slideBlock').get_attribute('src')big_url = self.driver.find_element_by_id('slideBg').get_attribute('src')y = self.get_distance(small_url, big_url)element = self.driver.find_element_by_id('tcaptcha_drag_button')distance = y * (280.0 / 680.0) - offsetprint('distance:', distance)has_gone_dist = 0remaining_dist = distanceActionChains(self.driver).click_and_hold(element).perform()time.sleep(0.5)steps = self.get_steps(distance)for step in steps:print(step)ActionChains(self.driver).move_by_offset(step, random.randint(-5, 5)).perform()time.sleep((random.randint(5, 15) / 1000))ActionChains(self.driver).release(on_element=element).perform()self.driver.switch_to.parent_frame()if self.driver.title != "QQ邮箱":try:self.driver.switch_to.default_content()self.driver.switch_to.frame('login_frame')self.driver.switch_to.frame("tcaptcha_iframe")print(self.driver.find_element_by_id('guideText').text)print('滑动失败!')self.verification_code(23)except Exception as e:print(e)print('帐号密码有误!')else:print('登录成功!')self.driver.quit()def get_steps(self, dis):# v=v0+at, s=v0t+½at², v²-v0²=2asv = 0t = 0.3steps = []current = 0mid = dis / 2while current < dis:if current < mid:a = 2else:a = -2v0 = vs = v0 * t + 0.5 * a * (t ** 2)current += ssteps.append(round(s))v = v0 + a * treturn stepsif __name__ == '__main__':email = QQEmail("993226448", "23562465")email.login_email()

【测试】使用selenium实现QQ邮箱登录相关推荐

  1. Python selenium模拟QQ邮箱登录

    from selenium import webdriver import timebrowser = webdriver.Chrome() browser.get('https://mail.qq. ...

  2. HTML+CSS 模拟QQ邮箱登录界面

    模拟QQ邮箱登录界面 index.html <!DOCTYPE html> <html lang="en"> <head><meta ch ...

  3. [实战篇]关于QQ邮箱登录之测试用例

    今天,我们来分析一个关于QQ邮箱登录模块的测试用例: 邮箱登录模块它就只有两个,一个是登录账号,一个是登录密码.在上一篇注册模块的文章中分析过,如果是一个输入框的话,你就直接对这一个输入框进行等价类划 ...

  4. 利用 telnet 命令测试 SMTP 服务(QQ邮箱)

    文章目录 开通QQ邮箱的SMTP服务 开启telnet客户端 使用CMD利用 telnet 命令测试 SMTP 服务 开通QQ邮箱的SMTP服务 首先要开启QQ邮箱的smtp服务,默认是关闭的. 1. ...

  5. python实现kindle每天推送博客1----kindle推送原理,python实现qq邮箱登录及邮件发送

    kindle想每天看新闻,看博客, 其实自己用python写个代码就能很简单实现了. 1.kindle推送原理 kindle不仅可以买书看书,还可以自己推送内容 原理很简单,往你个人的kindle邮箱 ...

  6. QQ邮箱登录PC布局实战笔记二

    本文目标: 尽量100%还原QQ邮箱登录界面头部区域,掌握div之间的位置关系,掌握常见的定位技术和浮动技术.将头部所需要的HTML标签进行仔细学习. 开始准备: 浏览器:Firefox/Chrome ...

  7. QQ邮箱登录PC布局实战笔记一

    QQ邮箱布局实战(PC)笔记<一> 开篇说明: 这个系列的笔记算是作为我复习前端知识的一个系列吧.前端的知识很杂,各种小技巧很多,而且更新变化很快,不像我们在校学习的那些计算机基础理论知识 ...

  8. Java+Selenium实现QQ邮箱自动登录、发邮件与退出

    初学selenium,用最近所学知识写了QQ邮箱自动登录.发送邮件.退出,算是对自己学习的知识的巩固吧.如果哪里有不足之处,就请各位告诉我,指导我一下,非常感谢. 登录页面 在网页登录QQ邮箱的时候, ...

  9. 自动化测试QQ邮箱登录【问题及完整测试代码】

    一.问题描述: 使用百度搜索QQ邮箱,点击邮箱官网进入QQ邮箱首页后,切换到iframe中报错(无法找到元素). 二.代码描述: from selenium import webdriver impo ...

  10. 017:Opencv+Selenium模拟QQ邮箱滑块操作

    之前发了一个国航的滑块模拟操作,没有计算滑块到缺口的位置. 本篇则是用opencv+selenium来对QQ邮箱的滑块进行模拟测试. QQ邮箱链接: https://mail.qq.com/ QQ邮箱 ...

最新文章

  1. infoseccrypto_java下载_關於php接ICBC的支付接口的解決方案
  2. 《Ext JS权威指南》——2.4节关于Ext.onReady
  3. 浅淡 RxJS WebSocket
  4. 花呗借呗还不上会打通讯录电话号码吗?
  5. Kubernetes安装时gpg: no valid OpenPGP data found. 的另外一种解决办法
  6. C++ 中的Virtual Function (虚函数)
  7. Monkey之环境搭建
  8. Leetcode18.四数之和
  9. 一篇文章讲清楚人工智能、机器学习和深度学习的区别与联系
  10. 单片机计算机实训总结,单片机实习心得体会三篇
  11. linux监控工具 go实现,安装和使用gotop进行Linux系统进程监控的方法
  12. 程序员转行量化交易可行吗?
  13. 免费抠图神器!五秒在线搞定抠图
  14. 使用Cluster API提供裸金属Kubernetes
  15. 思科模拟器服务器http配置文件,在思科模拟器上通过TFTP拷贝路由器的配置文件到本地...
  16. Android 拖动条 和 Handle
  17. 通过雪花(snowflake)算法用Python实现一个简单的发号器
  18. SAC-IA算法实现
  19. 2014校园招聘总结 .
  20. 猿创征文|基于鲁棒控制理论的微电网优化调度(Matlab代码实现)

热门文章

  1. goldendict 屏幕取词
  2. 图解IE浏览器下,如何保存输入记录
  3. 学习java和html必须要知道的英文单词(入门单词,包括C#)
  4. 数字逻辑电路(一、基本概述、数制及其转换)
  5. Nodejs安装在D盘酱紫报错?
  6. 服务器网卡bond配置指引
  7. Mysql联表查询(学生表、教师表、成绩表、课程表)
  8. MSP430F149的TIMERA定时中断理解
  9. activiti获取偏移量minx与miny
  10. VUE输入 身份证 号,获取出生年月日