Selenium-免登录的实现

场景:

  经常会遇到登录需要验证码这样类似的情况

解决方案:

  1.万能验证码

  2.利用cookies来实现,问开发哪个cookies值是登录后需要的,把这个值带上即可

  3.利用火狐浏览器的profile文件来实现(首先需要手工登录一次,且勾选记住信息)

  4.手工输入(需要输入的地方sleep一会)

实例一:

  利用cookies登录百度帐号

    1\获取到cookies,取得登录的cookie

      cookies = driver.get_cookies()

    2\添加cookies,登录帐号

      driver.add_cookie(cookie值)

 

获取到cookies值

复制代码
#! /usr/bin/env python
#coding=utf-8

from selenium import webdriver
import time

driver = webdriver.Firefox()
driver.get("https://www.baidu.com/")
time.sleep(3)

driver.find_element("linkText","登录").click()
driver.find_element("name","userName").send_keys("13560459046")
driver.find_element("name","password").send_keys("xr199122")
time.sleep(20)
#手动输入验证码
driver.find_element("id","TANGRAM__PSP_10__submit").click()
time.sleep(5)

#获取cookies值
cookies = driver.get_cookies()
print(cookies)
driver.quit()

#删除cookies值
#driver.delete_all_cookies()
复制代码

结果:

  

[
{'value': '828211617093E523BC5EDFE05AB3EA39:FG=1', 'expiry': 3651917680, 'path': '/', 'name': 'BAIDUID', 'httpOnly': False, 'secure': False, 'domain': '.baidu.com'},
{'value': '828211617093E523BC5EDFE05AB3EA39', 'expiry': 3651917680, 'path': '/', 'name': 'BIDUPSID', 'httpOnly': False, 'secure': False, 'domain': '.baidu.com'},
{'value': '1504433526', 'expiry': 3651917680, 'path': '/', 'name': 'PSTM', 'httpOnly': False, 'secure': False, 'domain': '.baidu.com'},
{'value': 'B490B5EBF6F3CD402E515D22BCDA1598', 'expiry': 1504520438, 'path': '/', 'name': 'BDORZ', 'httpOnly': False, 'secure': False, 'domain': '.baidu.com'},
{'value': 'eee17f0ccd81747c87f3b9e5f43712eb', 'expiry': 2556057600, 'path': '/', 'name': 'FP_UID', 'httpOnly': False, 'secure': False, 'domain': '.baidu.com'},
{'value': 'N2YTVzQX5aTWl4THpFWGhOMFp4VDk2T1MyQ0Z5bWRwRDMtcnhSN0lkQ1pZdE5aSVFBQUFBJCQAAAAAAAAAAAEAAAC~pSxhu-HF3LXE0NwyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJnVq1mZ1atZdk', 'expiry': 1763634068, 'path': '/', 'name': 'BDUSS', 'httpOnly': True, 'secure': False, 'domain': '.baidu.com'},
{'value': '1', 'expiry': None, 'path': '/', 'name': 'BD_HOME', 'httpOnly': False, 'secure': False, 'domain': 'www.baidu.com'},
{'value': '1439_12897_21089_22160', 'expiry': None, 'path': '/', 'name': 'H_PS_PSSID', 'httpOnly': False, 'secure': False, 'domain': '.baidu.com'},
{'value': '13314352', 'expiry': 1505298070, 'path': '/', 'name': 'BD_UPN', 'httpOnly': False, 'secure': False, 'domain': 'www.baidu.com'},
{'value': '1', 'expiry': 2450514070, 'path': '/', 'name': 'sugstore', 'httpOnly': False, 'secure': False, 'domain': '.www.baidu.com'}
]

剩下的如何取到登录的cookie,需要自己去尝试,如果是开发中,就去问开发就行,更方便

利用cookie值,登录百度帐号

复制代码
#! /usr/bin/env python
#coding=utf-8
from selenium import webdriver
import time

'''
利用cookies值登录百度
{'value': 'N2YTVzQX5aTWl4THpFWGhOMFp4VDk2T1MyQ0Z5bWRwRDMtcnhSN0lkQ1pZdE5aSVFBQUFBJCQAAAAAAAAAAAEAAAC~pSxhu-HF3LXE0NwyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJnVq1mZ1atZdk', 
'expiry': 1763634068, 
'path': '/', 
'name': 'BDUSS', 
'httpOnly': True, 
'secure': False, 
'domain': '.baidu.com'}
'''
driver = webdriver.Firefox()
driver.get("https://www.baidu.com/")
time.sleep(3)

#设置cookies值,基本格式
c1 = {'value': 'N2YTVzQX5aTWl4THpFWGhOMFp4VDk2T1MyQ0Z5bWRwRDMtcnhSN0lkQ1pZdE5aSVFBQUFBJCQAAAAAAAAAAAEAAAC~pSxhu-HF3LXE0NwyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJnVq1mZ1atZdk', 
    'expiry': 1763634068, 
    'path': '/', 
    'name': 'BDUSS', 
    'httpOnly': True, 
    'secure': False, 
    'domain': '.baidu.com'}

#添加cookies
driver.add_cookie(c1)
time.sleep(3)

#刷新之后观察是否已经登录成功
driver.refresh()
time.sleep(5)

driver.quit()
复制代码

结果:

  

 

 

 

 

实例二:利用火狐浏览器的profile文件来实现(首先需要手工登录一次,且勾选记住信息),登录百度帐号

复制代码
#! /usr/bin/env python
#coding=utf-8
from selenium import webdriver
import time

'''
自己的火狐浏览器的profile文件路径查看方法
火狐浏览器-帮助-故障排除信息-显示文件夹
必须手工登录一次,并记住密码之后再运行此代码才可以
'''

profile_ff = "C:/Users/Administrator/AppData/Roaming/Mozilla/Firefox/Profiles/2e4p97lg.default"

fp = webdriver.FirefoxProfile(profile_ff)

driver = webdriver.Firefox(fp)

driver.get("https://www.baidu.com/")
time.sleep(5)
driver.quit()
复制代码

也可以实现免登录

posted @   R-Bear  阅读(4510)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示