python康复日记-request库的使用,爬虫自动化测试

news2025/3/29 19:35:27

一,request的简单应用

#1请求地址
URL='https://example.com/login'
#2参数表单
form_data = {
    'username': 'admin',
    'password': 'secret'
}
#3返回的响应对象response
response = requests.post(
    URL,data=form_data,timeout=5
)
#4处理返回结果,这里直接打印返回网页的正文。通常需要json转化,和encode编码下
print(reponse.content)

1,请求头需要设置,有些网站会限制访问

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36',
        'Referer': 'https://www.99csw.com/',
        'Accept-Language': 'zh-CN,zh;q=0.9'
    }

    try:
        # 发送HTTP请求
        response = requests.get(url, headers=headers, timeout=15)

2,response的属性

发送request请求后,返回的reponse对象里有我们要的信息,需要处理。常用的3个标粗了。

属性/方法类型/返回类型说明
status_codeintHTTP 状态码(如 200、404、500)
headersCaseInsensitiveDict响应头字典(不区分大小写)
textstr解码后的文本内容(自动根据 encoding 解码)
contentbytes原始字节内容(未解码的二进制数据)
json()dict/list解析 JSON 响应内容(非 JSON 内容会抛异常)
urlstr最终请求的 URL(含重定向后的地址)
encodingstr响应内容的编码格式(可手动修改)
apparent_encodingstr通过内容分析出的编码格式(自动检测)
rawHTTPResponse原始响应流对象(需配合 stream=True 使用)
cookiesRequestsCookieJar服务器返回的 Cookies
elapseddatetime.timedelta请求耗时(从发送到响应完成的时间)
historylist[Response]重定向历史记录列表
reasonstr状态码的文本描述(如 200 → "OK",404 → "Not Found")
requestPreparedRequest关联的请求对象(含请求头、方法、URL 等信息)

rep = reponse.content.decode('utf8'),content获取的正文是二进制,注意编码。

正文处理通常需要 json格式化 和 re正则模块 的匹配。

#对返回content正文中,span标签的获取,标题内容获取
pattern1 = re.compile(r'<span class="title">([^&]*?)</span>')
titles = pattern1.findall(resp.text)

3,session会话保持,处理cookie,保持会话。

Session 对象存储特定用户会话所需的属性及配置信息。可以带上cookie含帐号密码。

成功登陆之后,直接获取返回响应的cookie

def login():
    login_url = 'http://www.xxx.com/login'
    headers = {
         "Accept": "application/json, text/javascript, */*; q=0.01"
     }
    body = {
        "usercode": "liuzz05@****.com",
        "password": "123456"
     }
    try:
        res = requests.post(url=login_url, headers=headers, data=body)
        cookies = res.cookies
        cookie = requests.utils.dict_from_cookiejar(cookies)
        return cookie
    except Exception as err:
         print('获取cookie失败:\n{0}'.format(err))

如果没有,先登录,从浏览器工具栏取cookie,找信息。

F12检查请求。cookie里有大串字母,password,token等字样说明这个可能是带密码账号的cookie,要具体情况定。

直接使用cookie,或者把cookie放在header参数中,依据具体网站请求头格式而定

把cookie转化为字典格式,手动扣cookie的键值对。本地文件写入分析,拼接

def get_data():
 cookie = login()
 res = requests.get(url=get_data_url, cookies=cookie)
 print(res.text)

def get_data():
 cookie = login()
 headers = {
	 "cookie": cookie
 }
 res = requests.get(url=get_data_url, headers=headers)
 print(res.text)

一个完整的登录案例。

def auto_login():
    s = requests.Session()
    r = s.get(login_url)
    bs = BeautifulSoup(r.text,'html.parser')
    image = bs.find("img", {"id": "vcJpeg"})['src']
    lt_data = bs.find("input", {"name": "lt"})['value']
    csr_data = bs.find("input", {"name": "csrftoken"})['value']
    sec_data = bs.find("input", {"name": "sec"})['value']
    #print(lt_data,",",csr_data,",",sec_data)
    rootdir="http://172.16.5.12:10086"
    ir = s.get(rootdir+image)
    if ir.status_code == 200:
        with open('valid.jpg', 'wb') as f:
            f.write(ir.content);
            f.close();
        validateCode = get_code(Image.open('valid.jpg'))  # 通过本地图片解析验证码
        print(validateCode)
    postdata={
        'csrftoken': csr_data,
        'username': uosp_username,
        'password': base64.b64encode(uosp_passwd.encode('utf-8')),
        'institute': '00010000',
        'validateCode': validateCode,
        'lt': lt_data,
        'sec': sec_data,
        'dn': '',
        'ip': '144.4.44.44',
        '_eventId':'submit',
    }
    print(postdata)
    form_data={
        "action":"GetINCInfoByID",
        "id":"INC000287932",
    }
    s.post(login_url,data = postdata)
    s.post(incident_url,data = form_data)
    s.post(servicelogin_url)
    cookies_dict = requests.utils.dict_from_cookiejar(s.cookies)  # 登录后页面的cookie转化为dict
    #print("cookies is that ",cookies_dict)
    if ('.ASPXUSERDEMO' in  cookies_dict):  # 如果登录成功,cookie中会有.ASPXUSERDEMO字段值
        cookies = open('login_cookies', 'w')
        cookies.write(str(cookies_dict))  # 将cookie信息写入本地文件,其他模块直接访问文件可以绕过登录
        cookies.close()
        return s
    else:
            return None

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2322151.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

光谱范围与颜色感知的关系

光谱范围与颜色感知是光学、生理学及技术应用交叉的核心课题&#xff0c;两者通过波长分布、人眼响应及技术处理共同决定人类对色彩的认知。以下是其关系的系统解析&#xff1a; ‌1.基础原理&#xff1a;光谱范围与可见光‌ ‌光谱范围定义‌&#xff1a; 电磁波谱中能被特定…

网络地址转换技术(2)

NAT的配置方法&#xff1a; &#xff08;一&#xff09;静态NAT的配置方法 进入接口视图配置NAT转换规则 Nat static global 公网地址 inside 私网地址 内网终端PC2&#xff08;192.168.20.2/24&#xff09;与公网路由器AR1的G0/0/1&#xff08;11.22.33.1/24&#xff09;做…

Python正则表达式(一)

目录 一、正则表达式的基本概念 1、基本概念 2、正则表达式的特殊字符 二、范围符号和量词 1、范围符号 2、匹配汉字 3、量词 三、正则表达式函数 1、使用正则表达式&#xff1a; 2、re.match()函数 3、re.search()函数 4、findall()函数 5、re.finditer()函数 6…

【TI MSPM0】PWM学习

一、样例展示 #include "ti_msp_dl_config.h"int main(void) {SYSCFG_DL_init();DL_TimerG_startCounter(PWM_0_INST);while (1) {__WFI();} } TimerG0输出一对边缘对齐的PWM信号 TimerG0会输出一对62.5Hz的边缘对齐的PWM信号在PA12和PA13引脚上&#xff0c;PA12被…

MySQL: 创建两个关联的表,用联表sql创建一个新表

MySQL: 创建两个关联的表 建表思路 USERS 表&#xff1a;包含用户的基本信息&#xff0c;像 ID、NAME、EMAIL 等。v_card 表&#xff1a;存有虚拟卡的相关信息&#xff0c;如 type 和 amount。关联字段&#xff1a;USERS 表的 V_CARD 字段和 v_card 表的 v_card 字段用于建立…

更改 vscode ! + table 默认生成的 html 初始化模板

vscode ! 快速成的 html 代码默认为&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>D…

使用LVS的 NAT 模式实现 3 台RS的轮询访问

节点规划 1、配置RS RS的网络配置为NAT模式&#xff0c;三台RS的网关配置为192.168.10.8 1.1配置RS1 1.1.1修改主机名和IP地址 [rootlocalhost ~]# hostnamectl hostname rs1 [rootlocalhost ~]# nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.10.7/24…

MySQL实战(尚硅谷)

要求 代码 # 准备数据 CREATE DATABASE IF NOT EXISTS company;USE company;CREATE TABLE IF NOT EXISTS employees(employee_id INT PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),department_id INT );DESC employees;CREATE TABLE IF NOT EXISTS departments…

华为p10 plus 鸿蒙2.0降级emui9.1.0.228

需要用到的工具 HiSuite Proxy V3 华为手机助手11.0.0.530_ove或者11.0.0.630_ove应该都可以。 官方的通道已关闭&#xff0c;所以要用代理&#xff0c;127.0.0.1端口7777 https://www.firmfinder.ml/ https://professorjtj.github.io/v2/ https://hisubway.online/articl…

C# Modbus RTU学习记录

继C# Modbus TCP/IP学习记录后&#xff0c;尝试串口通信。 操作步骤&#xff1a; 1.使用Visual Studio安装Nuget包NModbus.Serial。 2.使用Modbus Slave应用程序&#xff0c;工具栏Connection项&#xff0c;单击Connect&#xff0c;弹窗Connection Setup&#xff0c;修改Con…

AI+Xmind自动生成测试用例(思维导图格式)

一、操作步骤: 步骤1:创建自动生成测试用例智能体 方式:使用通义千问/豆包智能体生成,以下两个是我已经训练好的智能体,直接打开使用即可 通义智能体: https://lxblog.com/qianwen/share?shareId=b0cd664d-5001-42f0-b494-adc98934aba5&type=agentCard 豆包智能…

(二)手眼标定——概述+原理+常用方法汇总+代码实战(C++)

一、手眼标定简述 手眼标定的目的&#xff1a;让机械臂和相机关联&#xff0c;相机充当机械臂的”眼睛“&#xff0c;最终实现指哪打哪 相机的使用前提首先需要进行相机标定&#xff0c;可以参考博文&#xff1a;&#xff08;一&#xff09;相机标定——四大坐标系的介绍、对…

【Linux网络-NAT、代理服务、内网穿透】

一、NAT技术 1.NAT技术背景 之前我们讨论了&#xff0c;IPV4协议中&#xff0c;IP地址数量不充足的问题 NAT技术当前解决IP地址不够用的主要手段&#xff0c;是路由器的一个重要功能 NAT&#xff08;网络地址转换&#xff0c;Network Address Translation&#xff09;是一种…

新手村:逻辑回归-理解02:逻辑回归中的伯努利分布

新手村&#xff1a;逻辑回归-理解02&#xff1a;逻辑回归中的伯努利分布 伯努利分布在逻辑回归中的潜在含义及其与后续推导的因果关系 1. 伯努利分布作为逻辑回归的理论基础 ⭐️ 逻辑回归的核心目标是: 建模二分类问题中 目标变量 y y y 的概率分布。 伯努利分布&#xff08…

golang Error的一些坑

golang Error的一些坑 golang error的设计可能是被人吐槽最多的golang设计了。 最经典的err!nil只影响代码风格设计&#xff0c;而有一些坑会导致我们的程序发生一些与我们预期不符的问题&#xff0c;开发过程中需要注意。 ​​ errors.Is​判断error是否Wrap不符合预期 ​…

【STM32】知识点介绍二:GPIO引脚介绍

文章目录 一、概述二、GPIO的工作模式三、寄存器编程 一、概述 GPIO&#xff08;英语&#xff1a;General-purpose input/output&#xff09;,即通用I/O(输入/输出)端口&#xff0c;是STM32可控制的引脚。STM32芯片的GPIO引脚与外部设备连接起来&#xff0c;可实现与外部通讯、…

【AI】NLP

不定期更新&#xff0c;建议关注收藏点赞。 目录 transformer大语言模型Google Gemma疫情网民情绪识别 整体框架 baseline构建 模型调参、模型优化、其他模型 数据trick、指标优化、magic feature 数据增强、伪标签、迁移学习 模型融合sklearn中TFIDF参数详解 频率阈值可以去掉…

Go 代理爬虫

现在注册&#xff0c;还送15美金注册奖励金 --- 亮数据-网络IP代理及全网数据一站式服务商 使用代理服务器&#xff0c;通过 Colly、Goquery、Selenium 进行网络爬虫的基础示例程序 本仓库包含两个分支&#xff1a; basic 分支包含供 Go Proxy Servers 这篇文章改动的基础代码…

【NLP 43、大模型技术发展】

目录 一、ELMo 2018 训练目标 二、GPT-1 2018 训练目标 三、BERT 2018 训练目标 四、Ernie —— baidu 2019 五、Ernie —— Tsinghua 2019 六、GPT-2 2019 七、UNILM 2019 八、Transformer - XL & XLNet 2019 1.模型结构 Ⅰ、循环机制 Recurrence Mechanism Ⅱ、相对位置…

在普通用户下修改root用户密码

1 从普通用户切换到root用户 sudo -s 再输入密码。 2 输入passwd ,会提醒你输入当前用户密码&#xff0c;验证后会提醒你输入root用户密码。 3 切换到root用户&#xff0c;使用修改过的密码登陆。 4 成功进入root用户。