当前位置: 首页 > news >正文

selenium非全新的方式同时启动多个浏览器又互不影响的一种实现方法,欢迎讨论!

最近在做模拟浏览器批量定时自动点击实现批量操作功能,主要使用selenium,但是发现selenium直接调用本地浏览器,启动的是一个全新的(与手动打开的不一致),网站可以检测到,每次都要双重验证(密码登录+短信验证),而我们手动操作浏览器只有第一次才需要短信验证,后续不需要,究其原因用selenium由于是全新启动,所以是无记忆的,为了避免这个坑,给碰到相同问题的同伴提供思路,写下此文,希望对大家有所帮助。

1.打开谷歌浏览器;
2.在搜索框直接输入chrome://version/,找到“个人资料路径
在这里插入图片描述
注意:不要复制Default。

3.代码

from selenium import webdriver
option = webdriver.ChromeOptions()
option.add_argument(r'--user-data-dir=C:\Users\qiao\AppData\Local\Google\Chrome\User Data')
option.add_experimental_option('excludeSwitches', ['enable-automation'])
driver = webdriver.Chrome(options=option)

此时启动的浏览器和本地直接打开浏览器内容一致,可以跳过部分网站对selenium的检测机制。

4.以上只能让一个浏览器实例有"记忆",如果selenium同时启动多个浏览器,只有一个浏览器会成功,其它则会因为user data共享的混乱导致失败,不信可以试试,我的解决方案是在C:\temp\Chrome\目录下复制这个文件夹"C:\Users\qiao\AppData\Local\Google\Chrome\User Data"多个,分别命名为User Data01, User Data02,…
文件目录结构如下:
C:\temp\Chrome
|__User Data01
|__User Data02
|__User Data03
|__xxxx
然后在启动每个实例时指定user data路径,比如将它们以参数形式写到option.add_argument(r’–user-data-dir=pathxxx’)中,这样每个实例就能各自独立地带"记忆"运行了

5。当然大部分网站都不严格,不需要这么麻烦,如果你有更好的方法,欢迎留言评论!

相关文章:

  • Finance Manager System (FMS)
  • Centos7 安装nginx
  • 搜维尔科技:Varjo XR-4功能详解:由凝视驱动的XR自动对焦相机系统
  • WPF入门--多种方式设置样式(Style)
  • 英语阅读文章
  • 探索 Adobe Illustrator 2023 (AI 2023) for Mac/Win——创意设计的强大工具
  • Python_ 爬楼梯
  • Win32和c++11多线程
  • 物联网-高性能时序数据库QuestDB
  • 问题:8255A的端口A工作在方式2时,使用端口C的______作为与CPU和外部设备的联络信号。 #媒体#经验分享#其他
  • 【SpringBoot + Vue 尚庭公寓实战】项目介绍(一)
  • 浅谈提示词发展现状,Prompt 自动优化是未来。
  • 七天进阶elasticsearch[Three]
  • 每日题库:Huawe数通HCIA——全部【813道】
  • 【微信小程序】页面事件
  • 自己简单写的 事件订阅机制
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • golang中接口赋值与方法集
  • HTTP中GET与POST的区别 99%的错误认识
  • JS字符串转数字方法总结
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • MySQL用户中的%到底包不包括localhost?
  • Node项目之评分系统(二)- 数据库设计
  • Transformer-XL: Unleashing the Potential of Attention Models
  • Twitter赢在开放,三年创造奇迹
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 前端工程化(Gulp、Webpack)-webpack
  • 嵌入式文件系统
  • 巧用 TypeScript (一)
  • 实现菜单下拉伸展折叠效果demo
  • 说说动画卡顿的解决方案
  • 算法之不定期更新(一)(2018-04-12)
  • 原生 js 实现移动端 Touch 滑动反弹
  • postgresql行列转换函数
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ###项目技术发展史
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • ()、[]、{}、(())、[[]]命令替换
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (阿里云万网)-域名注册购买实名流程
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (译)计算距离、方位和更多经纬度之间的点
  • *** 2003
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .md即markdown文件的基本常用编写语法
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .Net接口调试与案例
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .NET项目中存在多个web.config文件时的加载顺序
  • .NET中 MVC 工厂模式浅析