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

发表于:2023-5-16 09:32

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

 作者:RoyFans    来源:博客园

  一、使用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 (Linux; U; Android 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"C:Program 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
  # 启用书签同步
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号