Python3+selenium实现cookie免密登录的示例代码


Posted in Python onMarch 18, 2020

进过两天的研究终于实现了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()

Python3+selenium实现cookie免密登录的示例代码

Python3+selenium实现cookie免密登录的示例代码

示例二:

首先使用用户名和账号,登录获取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()

到此这篇关于Python3+selenium实现cookie免密登录的示例代码的文章就介绍到这了,更多相关selenium cookie免密登录内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python中sleep函数用法实例分析
Apr 29 Python
独特的python循环语句
Nov 20 Python
Python中常见的异常总结
Feb 20 Python
Python Web程序部署到Ubuntu服务器上的方法
Feb 22 Python
python利用微信公众号实现报警功能
Jun 10 Python
python提取包含关键字的整行数据方法
Dec 11 Python
Python supervisor强大的进程管理工具的使用
Apr 24 Python
详解使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件
Aug 23 Python
基于Python3读写INI配置文件过程解析
Jul 23 Python
PyTorch的Debug指南
May 07 Python
Python图片检索之以图搜图
May 31 Python
Python使用Web框架Flask开发项目
Jun 01 Python
Selenium启动Chrome时配置选项详解
Mar 18 #Python
python+selenium+Chrome options参数的使用
Mar 18 #Python
selenium WebDriverWait类等待机制的实现
Mar 18 #Python
Python socket处理client连接过程解析
Mar 18 #Python
python selenium自动化测试框架搭建的方法步骤
Jun 14 #Python
Python如何使用paramiko模块连接linux
Mar 18 #Python
Python selenium页面加载慢超时的解决方案
Mar 18 #Python
You might like
在PHP中使用curl_init函数的说明
2010/11/02 PHP
PHP自动选择 连接本地还是远程数据库
2010/12/02 PHP
手把手编写PHP框架 深入了解MVC运行流程
2016/09/19 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
2016/09/30 PHP
php实现微信分享朋友链接功能
2019/02/18 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
jQuery 中关于CSS操作部分使用说明
2007/06/10 Javascript
jquery 表格分页等操作实现代码(pagedown,pageup)
2010/04/11 Javascript
javascript调试说明
2010/06/07 Javascript
JS性能优化笔记搜索整理
2013/08/21 Javascript
javascript页面渲染速度测试脚本分享
2014/04/15 Javascript
jQuery中的siblings用法实例分析
2015/12/24 Javascript
谈一谈javascript中继承的多种方式
2016/02/19 Javascript
原生js的ajax和解决跨域的jsonp(实例讲解)
2017/10/16 Javascript
JS解决position:sticky的兼容性问题的方法
2017/10/17 Javascript
vue项目webpack中Npm传递参数配置不同域名接口
2018/06/15 Javascript
Vue注册组件命名时不能用大写的原因浅析
2019/04/25 Javascript
Vue 事件的$event参数=事件的值案例
2021/01/29 Vue.js
[02:04]2014DOTA2国际邀请赛 DK一个时代的落幕
2014/07/21 DOTA
[30:51]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第一局
2016/03/04 DOTA
Python 执行字符串表达式函数(eval exec execfile)
2014/08/11 Python
Python 自动补全(vim)
2014/11/30 Python
总结Python编程中函数的使用要点
2016/03/20 Python
Python批量发送post请求的实现代码
2018/05/05 Python
pycharm设置注释颜色的方法
2018/05/23 Python
Python OpenCV处理图像之图像像素点操作
2018/07/10 Python
python中partial()基础用法说明
2018/12/30 Python
使用Python项目生成所有依赖包的清单方式
2020/07/13 Python
基于Python pyecharts实现多种图例代码解析
2020/08/10 Python
银行优秀员工事迹
2014/02/06 职场文书
学校运动会报道稿
2014/09/23 职场文书
大学生简历自我评价2015
2015/03/03 职场文书
军训决心书范文
2015/09/22 职场文书
导游词之张家口
2019/12/13 职场文书
redis使用不当导致应用卡死bug的过程解析
2021/07/01 Redis
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android