selenium在写脚本时解决重复登录或者绕过登录问题

发表于:2023-3-15 09:20

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:白坭​    来源:知乎

  测试过程中,每一次调试脚本都需要登录,特比的浪费时间我要做一下处理。
  1,把 selenium 启动的浏览器状态进行持久化保存,其他的测试脚本可以共用浏览器状态,在一定程度上能提升测试效率,也可以用在其他的场合上。
  2,大多数的网站操作都需要登录状态。我们可以先独立编写登录的代码,然后把登录的浏览器状态存储起来, 之后我们每次想进行该网站的操作,可以直接把浏览器 session 取出来,直接操作,节省了每次都要重新登录的流程。
  3,cooking具有时效性,防止时效。
  操作cookie
  webdriver启动的浏览器没有把浏览器本身的cookie带出来,这个应该是隔离了本身的浏览器配置,如果能把它们统一就方便了,不过这样就不是测试框架了。。。
  那么我们为了避免重复登录还是要想办法处理cookie。
  import os
  import pickle
  import time
  from selenium import webdriver
  from selenium.webdriver.chrome.service import Service
  from selenium.webdriver.support.wait import WebDriverWait
  options = webdriver.ChromeOptions()
  options.add_argument('window-size=1920x1080')  # 指定浏览器分辨率
  # 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Selenium
  options.add_argument("--disable-blink-features=AutomationControlled")
  options.add_experimental_option('useAutomationExtension', False)
  options.add_experimental_option('excludeSwitches', ['enable-automation'])
  options.add_argument("--no-sandbox")# 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
  s = Service('/usr/local/bin/chromedriver')
  brower = webdriver.Chrome(service=s, options=options)
  wait = WebDriverWait(brower, 10)
  url = "http://https://weibo.com/"
  brower.get(url)
  bcookies  = brower.get_cookies()
  cookies_nologin = {}
  for item in bcookies:
      cookies_nologin[item['name']] = item['value']
  print(cookies_nologin)
  print("\n\n")
  time.sleep(60)#页面做登录操作
  bcookies  = brower.get_cookies()
  cookies = {}
  for item in bcookies:
      cookies[item['name']] = item['value']
      outputPath = open('cookie.pickle','wb')
      pickle.dump(cookies,outputPath)
  #print(browser.get_cookies())
  print(cookies)
  print("\n\n")
  import os
  import pickle
  import time
  from selenium import webdriver
  from selenium.webdriver.chrome.service import Service
  from selenium.webdriver.support.wait import WebDriverWait
  options = webdriver.ChromeOptions()
  options.add_argument('window-size=1920x1080')  # 指定浏览器分辨率
  # 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Selenium
  options.add_argument("--disable-blink-features=AutomationControlled")
  options.add_experimental_option('useAutomationExtension', False)
  options.add_experimental_option('excludeSwitches', ['enable-automation'])
  options.add_argument("--no-sandbox")# 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
  class TmallRefresh():
      def __init__(self):
          s = Service('/usr/local/bin/chromedriver')
          cookie_pickle= pickle.load(open('cookie.pickle','rb'))
          self.driver= webdriver.Chrome(service=s, options=options)
          wait = WebDriverWait(self.driver,10)
          url = "https://weibo.com/"
          self.driver.get(url)
          for cookie in cookie_pickle:
              self.driver.add_cookie({   #"domain修改值weibo.com
                  "domain":".weibo.com","name":cookie,"value":cookie_pickle[cookie],"path": '/'})#"expires": None
          self.driver.get(url)
          time.sleep(1000000)
  if __name__=='__main__':
      qian=TmallRefresh()
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号