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 ...
随机推荐
- Github文件在线加速下载
众所周知,GitHub是一个巨大的开源宝库,以及程序员和编程爱好者的聚集地,诸多优秀的开源项目全部都是位于GitHub上.但是每当我们看到优秀的开源项目,准备去下(bai)载(piao)时,会发现速度 ...
- BeanUtils.copyProperties的使用方法
BeanUtils.copyProperties的使用方法 1.使用的是springframe包下的,BeanUtils.copyProperties(a,b) 把a属性拷贝给b属性 2.注意事项: ...
- python使用pickle序列化对象读取输出二进制文件
import pickle class tick: name = '牛牛牛' age = 10 samp = [1,2,3,'aaa',[12,3],tick()] with open('te.xxx ...
- helm安装csi-driver-nfs-v4.1.0
Application version v4.1.0 Chart version v4.1.0 获取chart包 helm repo add csi-driver-nfs https://raw.gi ...
- Linux_more_less总结
先写结论 : less is more,使用less 优于使用more more 和 less的区别 优于more不能后退,而less 就在其基础上增加了后退功能 less 可以使用键盘上的上下方向键 ...
- Pod 使用进阶
静态 Pod 在 Kubernetes 集群中除了我们经常使用到的普通的 Pod 外,还有一种特殊的 Pod,叫做Static Pod,也就是我们说的静态 Pod,静态 Pod 有什么特殊的地方呢? ...
- kubernetes kubectl 命令自动补全
yum install -y bash-completion source /usr/share/bash-completion/bash_completion source <(kubectl ...
- centos7.5升级系统内核版本
1.yum update curl nss 2.yum install wget 3.rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.or ...
- 关于linux的一点好奇心(五):进程线程的创建
一直以来,进程和线程的区别,这种问题一般会被面试官拿来考考面试者,可见这事就不太简单.简单说一点差异是,进程拥有独立的内存资源信息,而线程则共享父进程的资源信息.也就是说线程不拥有内存资源,所以对系统 ...
- WPF绘制圆形调色盘
本文使用writeableBitmap类和HSB.RGB模式来绘制圆形的调色盘. 开源项目地址:https://github.com/ZhiminWei/Palette RGB为可见光波段三个颜色通道 ...