工作中需要测试一批谷歌邮箱是否能正常登录。
做了半天手工,我就想起了python和我之前有学过的一点点selenium测试
一 开始通过edge浏览器的selenium插件录制登录注销的操作步骤
然后再来修改脚本中的账号密码辅助邮箱什么的
后来发现脚本并不能顺利运行,在输入账号密码的那一步总会被谷歌识别,提示错误
录制不行我就想通过python代码来实现,上网搜了点脚本就照着改
结果还是倒在了输入账号密码登陆的那一步
不得不说谷歌的技术还是牛B
现在来这里发一下代码,看看万能的网友能不能帮忙解决一下

import random
import string
from time import sleepfrom selenium import webdriver
from selenium.webdriver.common.by import By
from selenium_stealth import stealthoptions = webdriver.ChromeOptions()
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ""Chrome/92.0.4896.127 Safari/537.36")
# 不显示 浏览器正在被自动测试化软件控制,这个好像有点自欺欺人,我以我这个能干过谷歌的检测,结果没有
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument('--disable-blink-features=AutomationControlled')
driver = webdriver.Chrome(options=options)
stealth(driver,languages=["zh-CN", "cn"], # 设置中文vendor="Google Inc.",platform="Win64",webgl_vendor="Intel Inc.",renderer="Intel Iris OpenGL Engine",fix_hairline=True,)
# 这上面很多东西其实我也不太懂,都是找例子抄的
# 不知道有没有大佬能教我一两个是什么意思# 生成一个11位的密码
ran_str = ''.join(random.sample(string.ascii_letters + string.digits, 11))
print("新密码:  "+ran_str)
# 登录密码
password = "登录密码"
# 辅助邮箱
email = "xxxxxx@gmail.com"
# 新密码
newpassword = ran_str
driver.implicitly_wait(20) # 设置等待20秒钟,等待页面元素加载完成再点下一步操作
driver.get("https://www.google.com")# 点击登录
driver.find_element(By.XPATH, "/html/body/div[1]/div[1]/div/div/div/div[2]/a").click()
sleep(2)
# 手动输入邮箱,手动点击下一步,否则会被识别成自动脚本操作,就是倒在这里过不去
# xxxxx@gmail.com
sleep(2)
# 自动输入密码,这个没有问题
driver.find_element(By.XPATH, "/html/body/div[1]/div[1]/div[2]/div/div[2]/div/div/div[2]/div/div[""1]/div/form/span/section/div/div/div[1]/div[1]/div/div/div/div/div[1]/div/div[""1]/input").send_keys(password)
# 自动点击输入密码后的下一步
driver.find_element(By.XPATH, "/html/body/div[1]/div[1]/div[2]/div/div[2]/div/div/div[2]/div/div[2]/div/div[""1]/div/div/button/span").click()
# sleep(3)
# 点击确认使用辅助邮箱验证
# 关于验证有的账号不需要验证,有的账号登录了然后点个确认就进去了
driver.find_element(By.XPATH, "/html/body/div[1]/div[1]/div[2]/div/div[2]/div/div/div[2]/div/div[""1]/div/form/span/section/div/div/div/ul/li[3]/div").click()
# sleep(2)
# 输入辅助邮箱
driver.find_element(By.XPATH, "/html/body/div[1]/div[1]/div[2]/div/div[2]/div/div/div[2]/div/div[""1]/div/form/span/section/div/div/div[2]/div[1]/div/div[1]/div/div[""1]/input").send_keys(email)
sleep(1)
# 输入辅助邮箱后自动点击下一步,这里不能太快否则会挂在这里,所以上面睡了一秒
driver.find_element(By.XPATH, "/html/body/div[1]/div[1]/div[2]/div/div[2]/div/div/div[2]/div/div[2]/div/div[""1]/div/div/button/span").click()
# sleep(2)
# 点击谷歌账号,成功登录之后就要退出这个账号换下一个,或者修改密码
driver.find_element(By.XPATH, "/html/body/div/c-wiz/div/div/div/div[2]/div[3]/div/div[3]/a").click()
sleep(4)
#后面是要修改密码
# 点击Security
# driver.find_element(By.XPATH, "/html/body/c-wiz[2]/div/div[2]/div/c-wiz/c-wiz/div/div[1]/"
#                               "div[1]/c-wiz/nav/ul/li[4]/a/div[1]").click()
# sleep(2)
# 点击password
driver.find_element(By.XPATH, "/html/body/c-wiz[2]/div/div[2]/div/c-wiz/c-wiz/div/div[3]/div/div/c-wiz/section/div[""4]/div/div/div[2]/div/a/div/div[1]/div/div[1]/div").click()
# sleep(1)
# 再输入一次登录密码
driver.find_element(By.XPATH, "/html/body/div[1]/div[1]/div[2]/div/div[2]/div/div/div[2]/div/div[""1]/div/form/span/section/div/div/div[2]/div[1]/div/div/div/div/div[1]/div/div[""1]/input").send_keys(password)
sleep(1)
# 再点下一步
driver.find_element(By.XPATH, "/html/body/div[1]/div[1]/div[2]/div/div[2]/div/div/div[2]/div/div[2]/div/div[""1]/div/div/button/span").click()
# sleep(1)
# 设置新的密码
driver.find_element(By.XPATH, "/html/body/c-wiz/div/div[2]/div[2]/c-wiz/div/div[4]/form/div/div[1]/div/div[""1]/div/div/div/label/input").send_keys(newpassword)
# sleep(2)
# 确认新密码,再输入一次
driver.find_element(By.XPATH, "/html/body/c-wiz/div/div[2]/div[2]/c-wiz/div/div[4]/form/div/div[1]/div/div[""3]/div/div/label/input").send_keys(newpassword)
# sleep(1)
# 点击修改密码
driver.find_element(By.XPATH, "/html/body/c-wiz/div/div[2]/div[2]/c-wiz/div/div[4]/form/div/div[2]/div/div/button/span").click()
sleep(1)
# 退出账号,点击头像
driver.find_element(By.XPATH, "/html/body/div[2]/header/div[2]/div[3]/div[1]/div[2]/div/a/img").click()
sleep(2)
# 点击退出
# driver.find_element(By.XPATH, "/html/body/div/c-wiz/div/div/div/div/div[2]/div[3]/span/a/div").click()
# 点击移除账号
driver.find_element(By.XPATH, "/html/body/div[1]/div[1]/div[2]/div/div[2]/div/div/div[2]/div/div[""1]/div/form/span/section/div/div/div/div/ul/li[3]/div/div/div[2]").click()
sleep(1)
# 点击移除
driver.find_element(By.XPATH, "/html/body/div[1]/div[1]/div[2]/div/div[2]/div/div/div[2]/div/div[""1]/div/form/span/section/div/div/div/div[1]/ul/li[1]/div/div[2]").click()
sleep(1)
# 确认移除
driver.find_element(By.XPATH, "/html/body/div[5]/div/div[2]/div[3]/div[1]/span").click()
sleep(1)
# 关闭浏览器
driver.quit()
  • 整个脚本其实还是半自动,需要自己设置邮箱,辅助邮箱、登录密码,如果不是邮箱有一两百个,那我手动比这个半自动还要快一点,遇到登录失败那处理的更快。
  • 邮箱信息其实有一个Excel文档,里面包括辅助验证邮箱、登录密码,我就在想,用python实现自动读取这里面的信息,再把整个流程做成一个循环,完善它的判断,然后导出登录成功且修改密码以后的邮箱信息到一个新的文档,或者直接操作数据库。
  • 现在难点就卡在我没有正经学完python,函数,循环和判断不太了解,
  • 还有就是selenium怎么判断元素是否获取到,因为输入账号密码登录以后,可能不需要验证,而且登录成功后有几种场景,我刚开始想是根据元素的获取来判断是哪个场景,然后选择执行什么操作,但是现在好像selenium不支持直接判断元素是否存在。
  • 可能我的描述不是很准确,但是还是发出来,万一有大佬能明白我的意思呢。
  • 对了,我之前学过java开发。还没毕业,现在干的工作和开发没多大关系。

补充说明:等我想到了再来写~

Python+selenium+Gmail半自动登录-注销-修改密码相关推荐

  1. Django1.6 用Form实现注册登录注销修改密码(含代码!)

    参照了潘军杰的博客,但他Django版本有点老了,改动了不少东西,总体来说参考价值还是很大的,点http://www.2goo.info/blog/panjj/Django/2010/06/05/94 ...

  2. springBoot加layui和mybatis后台管理系统增删改查分页登录注销修改密码功能

    超市订单管理系统 1 登录页面 1.1 登录 点击提交按钮提交form表单使用post请求把(String name, String password)数据传到后台loginController 路径 ...

  3. 用Python+Selenium来测试登录自动登录163邮箱

    用Python+Selenium来测试登录自动登录163邮箱 1 准备条件 2 程序说明 3 代码 1 准备条件 ① windows系统(也许你是Linux,Mac,自行选择) ②安装了Anacond ...

  4. 【Openfire】网页版的用户注册、登录、修改密码

    Openfire客户端的开发是借助Smack提供的方法.Smack可以从官网下载.如果是Openfire3.7.1的版本,建议使用Smack3.2.2与其匹配.官网地址:http://www.igni ...

  5. IDEA版最新SMM整合,根据手机号实现登录/注册/修改密码

    IDEA版最新SMM整合,根据手机号实现登录/注册/修改密码 最近一直在进行springboot的项目,前一阵子项目组接手了一个SSM项目,需要实现手机短信验证的相关功能.于是自己进行了重操,整合了网 ...

  6. 简单注册、登录、修改密码、忘记密码程序

    简单注册.登录.修改密码.忘记密码程序 来自一枚大二通信工程渣渣写的代码 #include<stdio.h> #include<stdlib.h> #include<st ...

  7. 如何实现共享软件网络授权认证,包括注册新用户、登录、修改密码等操作

    开发共享软件,传统的是采用注册码验证方式,这种方式是大多数共享软件采用的方式,另外还有一种常见的验证方式,就是通过网络授权认证的方式,这种方式通过在程序中调用服务器的服务进行.一般具有验证用户名可用. ...

  8. java对mysql的简单操作的综合运用——登录+注册+修改密码

    本篇博客是java对mysql的简单操作的综合运用--登录系统.java对mysql的简单操作的综合运用--注册系统.java对mysql的简单操作的综合运用--修改密码系统的整合. 因为使用的是数据 ...

  9. MySQL8安装,初始化,登录和修改密码

    1 下载安装 官网传送门:MySQL :: Begin Your Download https://dev.mysql.com/downloads/file/?id=487686 2 新建配置文件 把 ...

最新文章

  1. 超越卷积、自注意力机制:强大的神经网络新算子involution
  2. elasticsearch python API
  3. MySQL杂记(更新时间——2014.05.23)
  4. Thinkphp5.0上传图片与运行python脚本
  5. C语言学习之分别用while、for 编写程序,计算2*4*6*......*100的值
  6. Asp.net使用HttpResponse.Filter 实现简繁/繁简转换
  7. 厦门市建筑物矢量数据(Shp格式+带高度)
  8. 【小程序源码】多功能图片处理器一键多种处理照片
  9. 使用谷歌学术镜像查找英文论文、英文论文阅读
  10. js常用正则 验证数字正则
  11. 小心了,京东订单详情会变?下单记得录屏
  12. C语言基础学习——简单的C程序格式
  13. 阈值Java_阈值处理(深入学习)
  14. java设计一个bank类实现银行_关于JAVA设计一个银行账户管理类
  15. 硬件设计基础----MOS管
  16. 【Havel 定理】Degree Sequence of Graph G
  17. 【总结】FLANN特征匹配
  18. 北大青鸟 ASP.NET(C#) 视频 全32集
  19. 转义字符 lt; gt; 等等
  20. 浅谈BCrypt密码加解密的使用

热门文章

  1. 说说Java中的TimeZone夏令时问题
  2. 赵丽颖明星人物介绍html源码 html期末大作业 课程设计
  3. 两个div并排显示 div居中显示
  4. Git安装配置与使用(超级详细)
  5. cad和python哪个应该学_Python自学入门学习基础之一:列表和元组
  6. 语音直播Demo及运行指引
  7. ArcGIS 每天一个高级制图技巧:2 浮雕效果
  8. [CSS] css优先级顺序
  9. 计算机 节能措施,电脑(计算机)耗电知多少(及节能节电措施及建议)
  10. KVM虚拟机磁盘加密