51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

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

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

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

    连续签到: 1 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2023-3-15 13:06:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    测试过程中,每一次调试脚本都需要登录,特比的浪费时间我要做一下处理。
      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()



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

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-22 14:27 , Processed in 0.074371 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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