51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

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

Python Selenium 保存网页缓存并保持登录

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

    连续签到: 4 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2023-5-16 15:17:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    一、使用selenium、helium 登录网页,保存缓存,下次登录直接使用缓存,代码如下:
      from selenium import webdriver
      from helium import *
      import base64
      import time
      import ddddocr
      import pickle
      def open_chrome():
          options = webdriver.ChromeOptions()
          # 以最高权限运行
          options.add_argument('--no-sandbox')
          # options.add_argument('--proxy-server=socks5://127.0.0.1:1080')
          # 禁用浏览器提示正在受自动化软件控制
          options.add_experimental_option('useAutomationExtension', False)
          # 防止反爬
          options.add_experimental_option('excludeSwitches', ['enable-automation'])
          # 指定用户文件夹User Data路径,可以把书签这样的用户数据保存在系统分区以外的分区
          options.add_argument('--user-data-dir=E:\\code\\tw\\tt\\cache')
          # 指定缓存Cache路径
          options.add_argument('--disk-cache-dir=E:\\code\\tw\\tt\\cache')
          # 谷歌文档提到需要加上这个属性来规避bug
          options.add_argument('--disable-gpu')
          # 禁用浏览器弹窗
          prefs = {
              'profile.default_content_setting_values': {
                  'notifications': 2
              }
          }
          options.add_experimental_option('prefs', prefs)
          driver = webdriver.Chrome(chrome_options=options)
          driver.maximize_window()
          set_driver(driver)
          go_to("http://127.0.0.1:8000/#/login")
          write("admin","账号")
          write("admin","密码")
          code_base64 = driver.find_element_by_css_selector("#code + img").get_attribute('src').split("data:image/png;base64,")[-1]
          img = base64.b64decode(code_base64)
          # 识别验证码
          ocr = ddddocr.DdddOcr(show_ad=False)
          code = ocr.classification(img)
          # code = res['pic_str']
          write(code, '验证码')
          # time.sleep()
          click(Button('登 录'))
          driver.get_screenshot_as_file("test.png")
          time.sleep(5)
          kill_browser()


      <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5056863357775693"
           crossorigin="anonymous"></script>


      二、selenium 配置参数
      每次当selenium启动chrome浏览器的时候,chrome浏览器很干净,没有插件、没有收藏、没有历史记录,这是因为selenium在启动chrome时为了保证最快的运行效率,启动了一个裸浏览器,这就是为什么需要配置参数的原因,但是有些时候我们需要的不仅是一个裸浏览器
      selenium启动配置参数接收是ChromeOptions类,创建方式如下 :
      from selenium import webdriver
      option = webdriver.ChromeOptions()
      driver = webdriver.Chrome(chrome_options=option)


      创建了ChromeOptions类之后就是添加参数,添加参数有几个特定的方法,分别对应添加不同类型的配置项目:
      from selenium import webdriver
      option = webdriver.ChromeOptions()

      # 添加启动参数
      option.add_argument()

      # 添加扩展应用
      option.add_extension()
      option.add_encoded_extension()

      # 添加实验性质的设置参数
      option.add_experimental_option()

      # 设置调试器地址
      option.debugger_address()


      常用配置参数:
      from selenium import webdriver
      option = webdriver.ChromeOptions()

      # 添加UA
      options.add_argument('user-agent="MQQBrowser/26 Mozilla/5.0 ([url=]Linux[/url]; U; [url=]Android[/url] 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"')

      # 指定浏览器分辨率
      options.add_argument('window-size=1920x3000')

      # 谷歌文档提到需要加上这个属性来规避bug
      chrome_options.add_argument('--disable-gpu')

       # 隐藏滚动条, 应对一些特殊页面
      options.add_argument('--hide-scrollbars')

      # 不加载图片, 提升速度
      options.add_argument('blink-settings=imagesEnabled=false')

      # 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
      options.add_argument('--headless')

      # 以最高权限运行
      options.add_argument('--no-sandbox')

      # 手动指定使用的浏览器位置
      options.binary_location = r"Crogram Files (x86)GoogleChromeApplicationchrome.exe"

      #添加crx插件
      option.add_extension('d:crxAdBlock_v2.17.crx')

      # 禁用JavaScript
      option.add_argument("--disable-javascript")

      # 设置开发者模式启动,该模式下webdriver属性为正常值
      options.add_experimental_option('excludeSwitches', ['enable-automation'])

      # 禁用浏览器弹窗
      prefs = {
          'profile.default_content_setting_values' :  {
              'notifications' : 2
           }
      }
      options.add_experimental_option('prefs',prefs)

      # 添加代理 ip
      options.add_argument("--proxy-server=http://XXXXX.com:80")

      driver = webdriver.Chrome(chrome_options=chrome_options)


      其他配置项目参数:
        --user-data-dir=[PATH]
      # 指定用户文件夹User Data路径,可以把书签这样的用户数据保存在系统分区以外的分区

        –disk-cache-dir=[PATH]
      # 指定缓存Cache路径

        –disk-cache-size=
      # 指定Cache大小,单位Byte

        –first run
      # 重置到初始状态,第一次运行

        –incognito
      # 隐身模式启动

        –disable-javascript
      # 禁用Javascript

        --omnibox-popup-count="num"
      # 将地址栏弹出的提示菜单数量改为num个

        --user-agent="xxxxxxxx"
      # 修改HTTP请求头部的Agent字符串,可以通过about:version页面查看修改效果

        --disable-plugins
      # 禁止加载所有插件,可以增加速度。可以通过about:plugins页面查看效果

        --disable-javascript
      # 禁用JavaScript,如果觉得速度慢在加上这个

        --disable-java
      # 禁用java

        --start-maximized
      # 启动就最大化

        --no-sandbox
      # 取消沙盒模式

        --single-process
      # 单进程运行

        --process-per-tab
      # 每个标签使用单独进程

        --process-per-site
      # 每个站点使用单独进程

        --in-process-plugins
      # 插件不启用单独进程

        --disable-popup-blocking
      # 禁用弹出拦截

        --disable-plugins
      # 禁用插件

        --disable-images
      # 禁用图像

        --incognito
      # 启动进入隐身模式

        --enable-udd-profiles
      # 启用账户切换菜单

        --proxy-pac-url
      # 使用pac代理 [via 1/2]

        --lang=zh-CN
      # 设置语言为简体中文

        --disk-cache-dir
      # 自定义缓存目录

        --disk-cache-size
      # 自定义缓存最大值(单位byte)

        --media-cache-size
      # 自定义多媒体缓存最大值(单位byte)

        --bookmark-menu
      # 在工具 栏增加一个书签按钮

        --enable-sync
      # 启用书签同步



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

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-26 01:11 , Processed in 0.064332 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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