Python3+selenium实现cookie免密登录的示例代码
作者:不努力,谁会可怜你? 发布时间:2023-01-31 15:43:09
标签:Python3,selenium,cookie,免密登录
进过两天的研究终于实现了cookie的免密登录,其实就是session。特别开心,因为在Python爬虫群里问那些大佬,可是他们的回答令我寒心,自己琢磨!!!
靠谁比如靠自己,为此我总结下经验,以免入门的小白再次踩这样的吭。其实网上很多博客写的都比较不详细甚
首先问题自己思考,不懂得去群里问问,然后最重要的要理解事物的本质,只有理解后才能运用它;最后在百度一下把所有相关的博客都点开,一条一条的看一遍总结下规律,比较喽的就舍弃,这样基本上都能得到启发作用。比如selenium的本质就是操作浏览器的,那么操作cookie也是操作浏览器的,并且用selenium打开浏览器时什么都没有,如果进入某个网站就会生成cookie先关信息。等待,那么我们可以用selenium打开网站之后让他清除所有cookie避免干扰,然后睡眠20秒以便等我们登陆,这是就会产生cookie,我们将它获取下来就可以实现登陆了。
下面直接上代码:
# 登录
def login_jd():
# 登录前清除所有cookie
browser.get('https://www.baidu.com/')
browser.delete_all_cookies()
# 打印登录前的cookie
cookieBefore = browser.get_cookies()
print(cookieBefore)
print("------------------------------------------------------------------------")
time.sleep(2)
list_cookies = [
{'domain': '.baidu.com', 'httpOnly': False, 'name': 'H_PS_PSSID', 'path': '/', 'secure': False, 'value': '1420_21120_29074_29237_2518_2909_29134_2832_28585_26350_2913'},
{'domain': '.baidu.com', 'expiry': 159184274.325927, 'httpOnly': False, 'name': 'BAIDUID', 'path': '/', 'secure': False, 'value': 'FF789623EA1785FF0D55ED0401D057B2:FG=1'},
{'domain': 'www.baidu.com', 'expiry': 1563289, 'httpOnly': False, 'name': 'BD_UPN', 'path': '/', 'secure': False, 'value': '123143'},
{'domain': '.baidu.com', 'expiry': 1560354688.892916, 'httpOnly': False, 'name': 'BDORZ', 'path': '/', 'secure': False, 'value': 'B490B5BF6F3CD40255D22BCDA1598'},
{'domain': '.baidu.com', 'expiry': 1819468287.471656, 'httpOnly': True, 'name': 'BDUSS', 'path': '/', 'secure': False, 'value': 'tGem1JzblNpOa1VVek0yLThmbWR6RxENWZtcVNwUThpT2hCLTVsUFBQUFBJCQAAAAAAAAAAAEAAAA4MdBAd3d3d2dnZ2dnZWVlZWUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALkI~1y5CP9cVm'},
{'domain': '.baidu.com', 'expiry': 2569420288, 'httpOnly': False, 'name': 'BIDUPSID', 'path': '/', 'secure': False, 'value': '587A2695FCD6D043A5FE5139E4F'},
{'domain': '.baidu.com', 'expiry': 3707755.819949, 'httpOnly': False, 'name': 'PSTM', 'path': '/', 'secure': False, 'value': '156027786'},
{'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'BD_HOME', 'path': '/', 'secure': False, 'value': '1'}
]
# 获取之后的cookie
cookies = browser.get_cookies()
print(browser.get_cookies())
# 将获取的的所有cookies添加到浏览器
for cookie in list_cookies:
browser.add_cookie(cookie)
print(cookie)
time.sleep(2)
# 刷新页面即可更新cookie
browser.refresh()
time.sleep(505)
browser.quit()
示例二:
首先使用用户名和账号,登录获取cookie
import json
import time
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.common.exceptions import NoSuchElementException
class Crawler():
def gather():
chrome_options = Options()
chrome_options.add_argument("window-size=1024,768")
driver = webdriver.Chrome(chrome_options=chrome_options, executable_path='C:\devtool\Anaconda\Scripts\chromedriver')
wait = WebDriverWait(driver, 1)
##登录百度知道
logurl = 'https://zhidao.baidu.com/'
#登录前清楚所有cookie
driver.delete_all_cookies()
driver.get(logurl)
##登录前打印cookie
print(driver.get_cookies())
##点击登录按钮
driver.find_element_by_xpath('//*[@id="userbar-login"]').click()
# driver.find_element_by_id("userbar-login").click()
time.sleep(2)
##首次尝试的 默认进入扫码登录的界面
try:
footerULoginBtn = driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__footerULoginBtn"]')
footerULoginBtn.click() #切换到用户名和密码登录
footerULoginBtn_not_exist = False
except:
footerULoginBtn_not_exist = True
## 用户名跟密码的设置并点击提交
user = driver.find_element_by_name('userName')
user.clear()
pwd = driver.find_element_by_name('password')
pwd.clear()
submit = driver.find_element_by_id('TANGRAM__PSP_10__submit')
time.sleep(2)
user.send_keys('用户名')
pwd.send_keys('密码')
time.sleep(1)
submit.click()
time.sleep(1)
## 发送手机验证码 验证
##点击发送按钮
###是否需要输入手机验证码
try:
driver.find_element_by_xpath('//*[@id="TANGRAM__28__button_send_mobile"]').click()
time.sleep(10)
##使用shell交互式,接受验证码
message = input("Tell me the captcha: ")
##输入验证码
captcha = driver.find_element_by_xpath('//*[@id="TANGRAM__28__input_label_vcode"]')
time.sleep(1)
captcha.send_keys(message)
time.sleep(1)
##点击提交
driver.find_element_by_xpath('//*[@id="TANGRAM__28__button_submit"]').click()
time.sleep(3)
except:
time.sleep(1)
### 获取cookie
cookie = driver.get_cookies()
print(cookie)
jsonCookies = json.dumps(cookie)
with open('vcyber.json', 'w') as f:
f.write(jsonCookies)
time.sleep(30)
Crawler.gather()
获取cookie后,可以不用输入密码登录
import json
import time
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.common.exceptions import NoSuchElementException
class Crawler():
def gather():
chrome_options = Options()
chrome_options.add_argument("window-size=1024,768")
driver = webdriver.Chrome(chrome_options=chrome_options, executable_path='C:\devtool\Anaconda\Scripts\chromedriver')
wait = WebDriverWait(driver, 1)
##登录百度知道
logurl = 'https://zhidao.baidu.com/'
#登录前清楚所有cookie
driver.delete_all_cookies()
driver.get(logurl)
f1 = open('vcyber.json')
cookie = f1.read()
cookie = json.loads(cookie)
for c in cookie:
driver.add_cookie(c)
# # 刷新页面
driver.refresh()
Crawler.gather()
来源:https://blog.csdn.net/qq_32603969/article/details/91415487
0
投稿
猜你喜欢
- 写在最前面:带你从最简单的二叉树构造开始,深入理解二叉树的数据结构,ps:不会数据结构的程序猿只能是三流的首先,我们构造一个二叉树这是最标准
- 下面先来看看例子:table表字段1 字段2 i
- 由于工作需求,想实现一个多级联动选择器,但是网上现有的联动选择器都不是我想要的,我参照基于vue2.0的element-ui中的Cascad
- 实现功能:1、子组件的input输入,改变父组件信息2、父组件对子组件1,3进行监听与控制3、子组件1与子组件3相互关联父子双向通信流程:子
- 编写断言使用assert编写断言pytest允许你使用python标准的assert表达式写断言;例如,你可以这样做:# test_samp
- 如何制作关联的下拉菜单?看看代码:<form name=f1 METHOD="POST">
- 先使用 Ms Access 压缩修复,然后再去相关的表把备注类型的字段里的“索引”去掉 备注型字段为什么不能超过1950字节?是由于备注型字
- 一. 打印图片属性、设置图片存储路径代码如下:#打印图片的属性、保存图片位置import cv2 as cvimport nump
- python配置文件有.conf,.ini,.txt等多种python集成的 标准库的 ConfigParser 模块提供一套 API 来读
- Python操作MySQL主要使用两种方式:原生模块 pymsqlORM框架 SQLAchemypymqlpymsql是Python中操作M
- 和设计师打过交道的人一定也见到过少数极品,不是扎着小辫子留着小胡子,就是剃了光头抽根烟,通常说起来一套一套的人作品都很一般般,而作品一般般的
- 本文是 《用 Golang 实现一个 Redis》系列文章第二篇,本文将分别介绍Redis 通信协议 以及 协议解析器 的实现,若您对协议有
- 决定数据类型的第一步是定义所存数数据的分类: 数值型, 字符串型还是临时型等;除了一些特别的并不是那么直观的外, 这通常是很直观的。接下来是
- 1、基本概念K近邻法(K-nearest neighbors,KNN)既可以分类,也可以回归。KNN做回归和分类的区别在于最后预测时的决策方
- 相信各位网页爱好者都对网页的loading很感兴趣吧!,想不想知道如何做一个:)现在给大家介绍一下一种loading的制作..效果图:loa
- 之前学习深度学习算法,都是使用网上现成的数据集,而且都有相应的代码。到了自己开始写论文做实验,用到自己的图像数据集的时候,才发现无从下手 ,
- 版本更新,原来user里的password字段已经变更为authentication_string版本更新 缘故,好多网上的教程都不适用了,
- 第一次使用csdn写文章,写得不好还请见谅。(运行环境:python3.6)下了一个带密码的压缩包文件,作为一个刚学python的新手,想着
- arange()类似于内置函数range(),通过指定开始值、终值和步长创建表示等差数列的一维数组,注意得到的结果数组不包含终值。linsp
- 前言:通常我们创建类都是使用class 类名,但是小伙伴们有没有想过,类是由谁来创建的呢,python中常说的万物皆对象,对象是由类创建的,