51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1117|回复: 0
打印 上一主题 下一主题

半自动登录-注销-修改密码之Python+selenium+Gmail

[复制链接]
  • TA的每日心情
    无聊
    昨天 09:05
  • 签到天数: 1050 天

    连续签到: 1 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2023-7-10 11:23:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    1. <font size="3">工作中需要测试一批谷歌邮箱是否能正常登录。
    2. 做了半天手工,我就想起了python和我之前有学过的一点点selenium测试
    3. 一 开始通过edge浏览器的selenium插件录制登录注销的操作步骤
    4. 然后再来修改脚本中的账号密码辅助邮箱什么的
    5. 后来发现脚本并不能顺利运行,在输入账号密码的那一步总会被谷歌识别,提示错误
    6. 录制不行我就想通过python代码来实现,上网搜了点脚本就照着改
    7. 结果还是倒在了输入账号密码登陆的那一步
    8. 不得不说谷歌的技术还是牛B
    9. 现在来这里发一下代码,看看万能的网友能不能帮忙解决一下
    10. </font>
    复制代码


    1. <font size="3">import random
    2. import string
    3. from time import sleep

    4. from selenium import webdriver
    5. from selenium.webdriver.common.by import By
    6. from selenium_stealth import stealth


    7. options = webdriver.ChromeOptions()
    8. options.add_argument(
    9.     "user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
    10.     "Chrome/92.0.4896.127 Safari/537.36")
    11. # 不显示 浏览器正在被自动测试化软件控制,这个好像有点自欺欺人,我以我这个能干过谷歌的检测,结果没有
    12. options.add_experimental_option("excludeSwitches", ["enable-automation"])
    13. options.add_experimental_option('useAutomationExtension', False)
    14. options.add_argument('--disable-blink-features=AutomationControlled')
    15. driver = webdriver.Chrome(options=options)
    16. stealth(driver,
    17.         languages=["zh-CN", "cn"], # 设置中文
    18.         vendor="Google Inc.",
    19.         platform="Win64",
    20.         webgl_vendor="Intel Inc.",
    21.         renderer="Intel Iris OpenGL Engine",
    22.         fix_hairline=True,
    23.         )
    24. # 这上面很多东西其实我也不太懂,都是找例子抄的
    25. # 不知道有没有大佬能教我一两个是什么意思

    26. # 生成一个11位的密码
    27. ran_str = ''.join(random.sample(string.ascii_letters + string.digits, 11))
    28. print("新密码:  "+ran_str)
    29. # 登录密码
    30. password = "登录密码"
    31. # 辅助邮箱
    32. email = "xxxxxx@gmail.com"
    33. # 新密码
    34. newpassword = ran_str
    35. driver.implicitly_wait(20) # 设置等待20秒钟,等待页面元素加载完成再点下一步操作
    36. driver.get("https://www.google.com")

    37. # 点击登录
    38. driver.find_element(By.XPATH, "/html/body/div[1]/div[1]/div/div/div/div[2]/a").click()
    39. sleep(2)
    40. # 手动输入邮箱,手动点击下一步,否则会被识别成自动脚本操作,就是倒在这里过不去
    41. # xxxxx@gmail.com
    42. sleep(2)
    43. # 自动输入密码,这个没有问题
    44. driver.find_element(By.XPATH, "/html/body/div[1]/div[1]/div[2]/div/div[2]/div/div/div[2]/div/div["
    45.                               "1]/div/form/span/section/div/div/div[1]/div[1]/div/div/div/div/div[1]/div/div["
    46.                               "1]/input").send_keys(password)
    47. # 自动点击输入密码后的下一步
    48. 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["
    49.                               "1]/div/div/button/span").click()
    50. # sleep(3)
    51. # 点击确认使用辅助邮箱验证
    52. # 关于验证有的账号不需要验证,有的账号登录了然后点个确认就进去了
    53. driver.find_element(By.XPATH, "/html/body/div[1]/div[1]/div[2]/div/div[2]/div/div/div[2]/div/div["
    54.                               "1]/div/form/span/section/div/div/div/ul/li[3]/div").click()
    55. # sleep(2)
    56. # 输入辅助邮箱
    57. driver.find_element(By.XPATH, "/html/body/div[1]/div[1]/div[2]/div/div[2]/div/div/div[2]/div/div["
    58.                               "1]/div/form/span/section/div/div/div[2]/div[1]/div/div[1]/div/div["
    59.                               "1]/input").send_keys(email)
    60. sleep(1)
    61. # 输入辅助邮箱后自动点击下一步,这里不能太快否则会挂在这里,所以上面睡了一秒
    62. 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["
    63.                               "1]/div/div/button/span").click()
    64. # sleep(2)
    65. # 点击谷歌账号,成功登录之后就要退出这个账号换下一个,或者修改密码
    66. driver.find_element(By.XPATH, "/html/body/div/c-wiz/div/div/div/div[2]/div[3]/div/div[3]/a").click()
    67. sleep(4)
    68. #后面是要修改密码
    69. # 点击Security
    70. # driver.find_element(By.XPATH, "/html/body/c-wiz[2]/div/div[2]/div/c-wiz/c-wiz/div/div[1]/"
    71. #                               "div[1]/c-wiz/nav/ul/li[4]/a/div[1]").click()
    72. # sleep(2)
    73. # 点击password
    74. 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["
    75.                               "4]/div/div/div[2]/div/a/div/div[1]/div/div[1]/div").click()
    76. # sleep(1)
    77. # 再输入一次登录密码
    78. driver.find_element(By.XPATH, "/html/body/div[1]/div[1]/div[2]/div/div[2]/div/div/div[2]/div/div["
    79.                               "1]/div/form/span/section/div/div/div[2]/div[1]/div/div/div/div/div[1]/div/div["
    80.                               "1]/input").send_keys(password)
    81. sleep(1)
    82. # 再点下一步
    83. 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["
    84.                               "1]/div/div/button/span").click()
    85. # sleep(1)
    86. # 设置新的密码
    87. 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["
    88.                               "1]/div/div/div/label/input").send_keys(newpassword)
    89. # sleep(2)
    90. # 确认新密码,再输入一次
    91. 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["
    92.                               "3]/div/div/label/input").send_keys(newpassword)
    93. # sleep(1)
    94. # 点击修改密码
    95. 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()
    96. sleep(1)
    97. # 退出账号,点击头像
    98. driver.find_element(By.XPATH, "/html/body/div[2]/header/div[2]/div[3]/div[1]/div[2]/div/a/img").click()
    99. sleep(2)
    100. # 点击退出
    101. # driver.find_element(By.XPATH, "/html/body/div/c-wiz/div/div/div/div/div[2]/div[3]/span/a/div").click()
    102. # 点击移除账号
    103. driver.find_element(By.XPATH, "/html/body/div[1]/div[1]/div[2]/div/div[2]/div/div/div[2]/div/div["
    104.                               "1]/div/form/span/section/div/div/div/div/ul/li[3]/div/div/div[2]").click()
    105. sleep(1)
    106. # 点击移除
    107. driver.find_element(By.XPATH, "/html/body/div[1]/div[1]/div[2]/div/div[2]/div/div/div[2]/div/div["
    108.                               "1]/div/form/span/section/div/div/div/div[1]/ul/li[1]/div/div[2]").click()
    109. sleep(1)
    110. # 确认移除
    111. driver.find_element(By.XPATH, "/html/body/div[5]/div/div[2]/div[3]/div[1]/span").click()
    112. sleep(1)
    113. # 关闭浏览器
    114. driver.quit()

    115. </font>
    复制代码
    整个脚本其实还是半自动,需要自己设置邮箱,辅助邮箱、登录密码,如果不是邮箱有一两百个,那我手动比这个半自动还要快一点,遇到登录失败那处理的更快。
    邮箱信息其实有一个Excel文档,里面包括辅助验证邮箱、登录密码,我就在想,用python实现自动读取这里面的信息,再把整个流程做成一个循环,完善它的判断,然后导出登录成功且修改密码以后的邮箱信息到一个新的文档,或者直接操作数据库。
    现在难点就卡在我没有正经学完python,函数,循环和判断不太了解,
    还有就是selenium怎么判断元素是否获取到,因为输入账号密码登录以后,可能不需要验证,而且登录成功后有几种场景,我刚开始想是根据元素的获取来判断是哪个场景,然后选择执行什么操作,但是现在好像selenium不支持直接判断元素是否存在。
    可能我的描述不是很准确,但是还是发出来,万一有大佬能明白我的意思呢。
    对了,我之前学过java开发。还没毕业,现在干的工作和开发没多大关系。


    转自:https://blog.csdn.net/WDNMDnm/article/details/124431007


    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-22 10:28 , Processed in 0.063461 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表