python模拟登录获取网站cookie
因工作的需要需要使用某第三方网站页面的功能,但其网站未提供API,只有登录用户可使用该功能。
之前试过php使用snoopy获取set-cookie内容项进行手动拼装cookie,使用一段时间后发现网站改版,cookie中出现了一些动态参数使用snoopy获取不到导致拼装出的cookie是无效的。
于是修改思路:如果不手动拼装cookie而是直接拿到cookie后存起来不就完美了吗?
明确要达到的目标
1、安装配置简单,
2、开发难度要低
基于上述目标选择了python + selenium + Chrome开发
使用到的工具和技术
1、python
2、selenium
3、xpath
4、chromedriver.exe 谷歌浏览器驱动
5、pyinstaller python代码打包
6、request 第三方包
使用pycharm进行开发,首先安装selenium和pyinstaller第三方包,可使用pip安装也可以使用pycharm自带的功能进行安装,
安装第三方包见此篇:https://www.cnblogs.com/python-gulp-php/articles/14448363.html
具体代码编写思路
1、从配置获取登录页面地址(这里是登录页面地址,不是请求提交地址)
2、使用selenium.webdriver获取对应的浏览器驱动
1 def get_driver(self):
2
3
4 '''获取驱动对象并返回'''
5 self.drivers = webdriver.Chrome(executable_path=self.chromePath)
6 return self.drivers
这里的self.chromePath写的是驱动的地址,
需要注意的是
1、这里是驱动不是谷歌浏览器应用程序,
2、这个驱动可在当前代码目录下不是必须放在浏览器的安装路径
3、Chrome需要首字母大写
驱动需要自己手动下载百度搜索并找到自己浏览器对应版本的驱动进行下载即可
3、使用xpath找到登录页面用户名,密码、登录按钮输入框并将用户名和密码绑定到对应DOM元素,
xpath获取见此文:https://www.cnblogs.com/python-gulp-php/articles/14448586.html
1 # 拼装登陆数据
2 driver.find_element_by_xpath(self.username_xpath).send_keys(self.username) #输入用户名
3 driver.find_element_by_xpath(self.password_xpath).send_keys(self.password) #输入密码
4 driver.find_element_by_xpath(self.button_xpath).click() #点击登陆
4、构建session并获取cookie
1 req = requests.Session() #构建Session
2 self.cookies = driver.get_cookies() #导出cookie
3
4 #print(self.cookies)
5 for cookie in self.cookies:
6 if self.cookie_str == '':
7 self.cookie_str = cookie['name']+'='+cookie['value']+';'
8 else:
9 self.cookie_str += cookie['name'] + '=' + cookie['value'] + ';'
10
11 if(self.params != ''):
12 self.cookie_str += self.params + ';'
13
14 self.cookie_str = self.cookie_str.encode("utf-8")
这里要修改编码为utf-8否则可能会抛异常
5、将拼装好的cookie传给服务器
1 self.base_str = base64.b64encode(self.cookie_str)
2
3 #print(self.base_str)
4
5 #driver.close()
6 driver.quit()
7
8 self.response = requests.post(self.request_url,{'base_cookie':self.base_str})
9
10 return self.response.json()
这里导入了base64模块将cookie转为base64格式进行传输防止传输时cooke中的特殊字符被转义或过滤掉,这里请求用到了request包需要手动导入它
这里贴上主方法的代码
1 def real_login(self):
2
3 '''实际登陆并获取cookie主方法'''
4 # 获取登陆页面地址
5 loginUrl = self.get_login_url();
6
7 # 获得驱动
8 driver = self.get_driver();
9
10 # 进入登陆界面
11 driver.get(loginUrl)
12
13 # 拼装登陆数据
14 driver.find_element_by_xpath(self.username_xpath).send_keys(self.username) #输入用户名
15 driver.find_element_by_xpath(self.password_xpath).send_keys(self.password) #输入密码
16 driver.find_element_by_xpath(self.button_xpath).click() #点击登陆
17
18
19 req = requests.Session() #构建Session
20 self.cookies = driver.get_cookies() #导出cookie
21
22 #print(self.cookies)
23 for cookie in self.cookies:
24 if self.cookie_str == '':
25 self.cookie_str = cookie['name']+'='+cookie['value']+';'
26 else:
27 self.cookie_str += cookie['name'] + '=' + cookie['value'] + ';'
28
29 if(self.params != ''):
30 self.cookie_str += self.params + ';'
31
32 self.cookie_str = self.cookie_str.encode("utf-8")
33 self.base_str = base64.b64encode(self.cookie_str)
34
35 #print(self.base_str)
36
37 #driver.close()
38 driver.quit()
39
40 self.response = requests.post(self.request_url,{'base_cookie':self.base_str})
41
42 return self.response.json()
驱动这里关闭有close()和quite()两种,区别是close()只关闭打开的当前浏览器窗口,运行时的cmd黑窗口不处理,quit()会将二者都关闭
6、为提高可移植性这里使用pyinstaller将代码打包成.exe
具体步骤和配置参见:https://blog.csdn.net/yql_617540298/article/details/112441159
python模拟登录获取网站cookie的更多相关文章
- 用python模拟登录(解析cookie + 解析html + 表单提交 + 验证码识别 + excel读写 + 发送邮件)
老婆大人每个月都要上一个网站上去查数据,然后做报表. 为了减轻老婆大人的工作压力,所以我决定做个小程序,减轻我老婆的工作量. 准备工作 1.tesseract-ocr 这个工具用来识别验证码,非常好用 ...
- 记一次HTTPClient模拟登录获取Cookie的开发历程
记一次HTTPClient模拟登录获取Cookie的开发历程 环境: springboot : 2.7 jdk: 1.8 httpClient : 4.5.13 设计方案 通过新建一个 ...
- 【py登陆】python模拟登录
用Python模拟登录网站 前面简单提到了 Python 模拟登录的程序,但是没写清楚,这里再补上一个带注释的 Python 模拟登录的示例程序.简单说一下流程:先用cookielib获取cookie ...
- python模拟登录的实现
本文主要用python实现了对网站的模拟登录.通过自己构造post数据来用Python实现登录过程. 当你要模拟登录一个网站时,首先要搞清楚网站的登录处理细节(发了什么样的数据,给谁发等...). ...
- [Python] Python 模拟登录,并请求
Python 模拟登录,并请求 # encoding: utf- import requests import socket import time socket.setdefaulttimeout( ...
- 【Python数据分析】Python模拟登录(一) requests.Session应用
最近由于某些原因,需要用到Python模拟登录网站,但是以前对这块并不了解,而且目标网站的登录方法较为复杂, 所以一下卡在这里了,于是我决定从简单的模拟开始,逐渐深入地研究下这块. 注:本文仅为交流学 ...
- ph模拟登录获取信息
cURL 是一个功能强大的PHP库,使用PHP的cURL库可以简单和有效地抓取网页并采集内容,设置cookie完成模拟登录网页,curl提供了丰富的函数,开发者可以从PHP手册中获取更多关于cURL信 ...
- 忘记秘密利用python模拟登录暴力破解秘密
忘记秘密利用python模拟登录暴力破解秘密: #encoding=utf-8 import itertools import string import requests def gen_pwd_f ...
- Python入门小练习 003 利用cookielib模拟登录获取账户信息
为了方便, 使用chinaunix的账户获取账户主题. 有些网站可能需要验证码, 找一些不用验证码的网站 下面 ****** 很多个星号的均为私密信息, 所以用星号代替 #!/usr/bin/pyt ...
随机推荐
- Silk语言-中国人自己的开源编程语言
什么是Silk Silk语言是一门完全独立自主开发的跨平台动态类型编程语言,绝非"木兰"等套壳语言. Silk简单易学,30分钟即可掌握全部语法,让你像Python一样简单地写C/ ...
- React报错之Invalid hook call
正文从这开始~ 总览 导致"Invalid hook call. Hooks can only be called inside the body of a function compone ...
- windows绕过杀软添加账户密码
windows绕过杀软添加账户密码 起因:system权限下存在杀软无法添加账户信息 绕过方法 1.C#脚本 运行后会在目标机器上创建一个用户为 wh4am1 密码为 qqai@love 的 Admi ...
- 第五十五篇:Axios的封装
好家伙, 上图 1.为什么需要封装axios? 当我们改变项目的使用环境时候,url也会随之改变,那么我们就需要改很多axios请求中的url配置 现在我们将axios封装,在项目使用环境改变时我们只 ...
- KingbaseES 全局临时表
Postgresql 支持会话级别的临时表,表的存续期只在创建临时表的会话存活期间,会话退出后,临时表自动删除,表结构及数据也无法跨会话共享.KingbaseES 除了支持PG原生的临时表机制外,还支 ...
- 常用MySQL语句(持续更新)
1. 客户端登录 在终端输入 mysql -u[用户名] -p[密码] 2. 数据库级别操作 // 创建数据库 create database [db name]; // 查看数据库列表 show d ...
- 用VBA在PowerPoint中实现日期时间秒级动态显示
'*********************************************************** 使用说明 ********************************** ...
- 0.web理解
web前后端 网站的前端:通过用户肉眼看到的网站的布局内容,对网站的操作的功能,可以让用户可以直接接触与操作的部分. 用户通过访问前端的功能,前端分为 静态功能+动态功能 静态功能:静态功能则不会和后 ...
- 车辆稳定性辅助(VSA)系统
当车辆转弯大于或小于预期时,VSA有助于在转弯时稳定车辆. 同时还有助于在湿滑路面上保持牵引力. VSA 打开和关闭 禁用: 请长按按钮直至听到哔的一声.VSA 关闭指示灯点亮. 恢复: 按下按钮直至 ...
- 第二章:视图层 - 6:QueryDict对象
类的原型:class QueryDict[source] 在HttpRequest对象中,GET和POST属性都是一个django.http.QueryDict的实例.也就是说你可以按本文下面提供的方 ...