利用ChromeOptions()加载用户配置

1|0一. 如何绕过页面登录


我们在登录网站的时候,通常需要输入用户名、密码和验证码,那么有没有办法绕过登录环节呢?

有两种方法可以解决这个问题,一种是利用chrome浏览器的用户配置,一种是利用cookie,这篇文章主要总结一下前者

2|0二. 如何实现加载用户配置(以博客园为例)


2|1第一步:如果之前未登录过该网站,在手工登录的时候,要勾选下次自动登录


2|2第二步:利用chrome://version查看User Data的路径


用户的配置信息都放在User Data目录下

2|3第三步:构建python代码


这里值得注意的是:

1. --user-data-dir 要写正确(--user-data-dir或user-data-dir都是可以的),我看很多博文里都写成了–user-data-dir,经过测试,发现后者是无法加载用户配置的

2. get后的url为登陆后页面的url,这也契合我们的目的:即绕过登录页面,直接查看登陆后的页面

from selenium import webdriver import time option = webdriver.ChromeOptions() option.add_argument("--user-data-dir=C:\\Users\\Beck\\AppData\\Local\\Google\\Chrome\\User Data") driver = webdriver.Chrome(options=option) driver.get("https://www.cnblogs.com")

2|4第四步:python代码运行之前,请关闭已打开的chrome浏览器


否则,chromedriver会挂起,后面打开url的操作不会执行,这一点请参考《Selenium chromedriver hangs if I specify user-data-dir in Chrome options》:

"The only one client could be connected to a debugger in one time. So, to fix the issue, when we want to enter to a user profile using a debugger - to avoid chromedriver hangs trying to connect to the debugger, we must close an existing Chrome session"

看来这个和远程调试有关系,如果想用调试器来进入用户配置,为了避免chromedriver尝试连接调试器而导致的挂起,必须关闭已经存在的chrome会话

2|5第五步:运行代码,观察结果


结果是符合预期的,因为看到的用户名,我的博客和退出选项

3|0三. 加载用户配置并不是万能的


利用ChromeOptions()加载用户配置的前提是,我们要访问页面的url在浏览器的每次会话中都是相同的,如果同一页面每次会话的url变化,这意味着可能要改变一下策略了,以QQ邮箱为例,每次浏览器会话中首页的url都是不同的

一次会话:

另一次会话:

 

从上面两张图中,可以明显发现这个sid是变动的,sid又是什么呢?请参考《详解SID之终结篇》,里面有句话是:

"SID即安全标识符(System IDentifier),它用来标识用户身份的。当系统每次创建用户都会分配一个唯一的SID,每个帐户的SID都是不重复的"

这样即使运行python代码,看到的始终是QQ邮箱的登录页面

 

 

 

 

 

4|0参考文章


https://blog.csdn.net/zwq912318834/article/details/78933910

https://www.cnblogs.com/baoyu7yi/p/7058537.html

https://stackoverflow.com/questions/41941573/selenium-chromedriver-hangs-if-i-specify-user-data-dir-in-chrome-options

 


__EOF__

本文作者cnhkzyy
本文链接https://www.cnblogs.com/my_captain/p/9258133.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   cnhkzyy  阅读(2485)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示