51Testing软件测试论坛

标题: 在写脚本时解决重复登录或者绕过登录问题之selenium [打印本页]

作者: lsekfe    时间: 2023-3-15 13:06
标题: 在写脚本时解决重复登录或者绕过登录问题之selenium
测试过程中,每一次调试脚本都需要登录,特比的浪费时间我要做一下处理。
  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软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2