selenium-wire兼容selenium和requests

selenium,wire,兼容,requests · 浏览次数 : 113

小编点评

**使用selenium-wire库在UI操作中获取API访问token** 1. **引入库**: ```python from seleniumwire import webdriver ``` 2. **创建Chrome驱动器**: ```python driver = webdriver.Chrome() ``` 3. **访问目标网页并访问其API接口**: ```python driver.get('http://124.223.31.21:9097/#/') ``` 4. **获取登录接口的path**: ```python path = driver.find_element('css selector', '.submit>button').get_attribute('href') ``` 5. **使用js获取登录接口的POST请求参数**: ```python js = "document.querySelector('[placeholder=请输入密码]').value='密码'" driver.execute_script(js) ``` 6. **解析响应数据并提取access token**: ```python result = json.loads(driver.response.body) token = result['token'] ``` 7. **关闭浏览器**: ```python driver.quit() ``` **注意:** * 这段代码假设您已设置了API接口的路径和登录信息。 * `seleniumwire`库很新,可能存在一些版本兼容问题。 * 请确保您已安装了`seleniumwire`库。

正文

背景

在工作中UI自动化中可能会需要用到API来做一些数据准备或清理的事情,那UI操作是略低效的,但API操作相对高效。

而实战课就有这样一个案例,不过那个案例是UI操作和API分开的。

极少会遇到这样的场景,我selenium操作网页,比如登录,应该底层也是有响应数据的,比如token之类的,那我是否可以通过UI操作获取到的token直接去发送后续的业务请求,而不是再在API层从头来一把(也是可以的)。

主角

这个库名叫selenium-wire ,pypi上其实蛮多类似的库的,比如selenium-requests,requests-selenium啥的,多是唬人的。

Github: https://github.com/wkeeling/selenium-wire

安装就不说了,直接看示例

from seleniumwire import webdriver  # Import from seleniumwire

# Create a new instance of the Chrome driver
driver = webdriver.Chrome()

# Go to the Google home page
driver.get('https://www.google.com')

# Access requests via the `requests` attribute
for request in driver.requests:
    if request.response:
        print(
            request.url,
            request.response.status_code,
            request.response.headers['Content-Type']
        )

从代码看,几点区别

  1. 导入这里from seleniumwire import webdriver,后续就跟原来的selenium类似了
  2. driver.requests是个关键的对象,这个对象的属性很多
    1. 首先它是个列表List[Request]
    2. 属性包括请求部分的:body、url、headers、params、abort()、cert、date、host、id、method等
    3. 响应是request.response:body、headers、cert、date、reason、status_code,注意并没有text、json等

实例

from seleniumwire import webdriver
from time import sleep
import json
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('http://124.223.31.21:9097/#/')
driver.find_element('id', 'formLabelAlign.username').send_keys('账号')
js = "document.querySelector('[placeholder=请输入密码]').value='密码'"
driver.execute_script(js)
driver.find_element('css selector', '.submit>button').click()

sleep(2)
for request in driver.requests:
    if request.url.endswith('/api/loginS'):
        result = json.loads(request.response.body)
        print(result)

说明几点

  1. 账号密码,vip学员自行获取

  2. 这个网站有个坑,输入密码要特殊处理,所以我用的js操作

  3. 结果部分我就去取了登录接口的path(已知的)

  4. 然后用json转了下body(bytes对象)

  5. 结果

    {'flag': '松勤教育', 'code': 200, 'message': '登录成功', 'data': {'studentId': 20155007, 'studentName': '翠花', 'grade': '2015', 'major': '网络工程', 'clazz': '1', 'institute': '软件工程学院', 'tel': '13900000000', 'email': 'sqqdcl@163.com', 'pwd': '', 'cardId': '2423423', 'sex': '女', 'role': '2'}, 'token': 'eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiLnv6DoirEiLCJzdWIiOiLnv6DoirEiLCJpYXQiOjE2OTM1NjAwOTF9.VDbx07ALrnAoohrYHZJBHcLRsTkUzCGe5VD4u6I7Qvc'}
    
    

我就分析到这里了,后续的自行搞定啦,关键是这个库不好找,我也是做个备忘

与selenium-wire兼容selenium和requests相似的内容:

selenium-wire兼容selenium和requests

# 背景 在工作中UI自动化中可能会需要用到API来做一些数据准备或清理的事情,那UI操作是略低效的,但API操作相对高效。 而实战课就有这样一个案例,不过那个案例是UI操作和API分开的。 极少会遇到这样的场景,我selenium操作网页,比如登录,应该底层也是有响应数据的,比如token之类的,

SpringBoot+Selenium模拟用户操作浏览器

Selenium Selenium是一个用于Web应用程序自动化测试的开源工具套件。它主要用于以下目的: 浏览器自动化:Selenium能够模拟真实用户在不同浏览器(如Chrome、Firefox、IE/Edge等)中的交互行为,通过编程方式控制浏览器执行一系列操作,例如点击按钮、填写表单、导航页面

比Selenium更优秀的playwright介绍与未来展望

Playwright是新兴的自动化测试工具,拥有丰富的功能和API,隐藏在众多的爬虫和自动化工具背后,而多模LLM的出现让Playwright可以如虎添翼,自动化智能化的RPA工具预计将会井喷般出现。

selenium Webdriver版本和浏览器版本不匹配问题:ChromeDriver only supports Chrome version 119 Current browser version is 124.0.6367.202

问题描述 代码如下: from selenium import webdriver from selenium.webdriver.common.by import By def test01(): driver = webdriver.Chrome() driver.get("https://ww

Selenium+2Captcha 自动化+验证码识别实战

> 本文深入探讨了使用Selenium库进行网页自动化操作,并结合2Captcha服务实现ReCAPTCHA验证码的破解。内容涵盖Selenium的基础知识、验证码的分类、2Captcha服务的使用,以及通过实例进行的详细讲解,最后对实践进行总结和优化思考,为读者提供了一条完整的验证码破解实践路线图

selenium库浅析

selenium库浅析 基于4.3 pip install selenium安装好后,在sitepackages下 2个主要的目录,common和webdriver 1- common 该目录一共就一个模块exceptions.py ① exceptions.py 其中定义了32个异常,竟然有个同学

Selenium中对于颜色的处理及拓展

Selenium中对于颜色的处理及拓展 获取百度一下按钮的背景色 from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get('https://www.baidu.com')

Selenium环境搭建

Selenium环境搭建 基于windows 10 素材 素材下载地址说明 python https://registry.npmmirror.com/binary.html?path=python/ 官网 https://mirrors.huaweicloud.com/python/ 国内地址 h

Selenium中免登录的实现方法一option

Selenium中免登录的实现方法一option 在selenium中有很多种可以实现网站的免登录,option就是其中的一种做法。 学员在VIP自动化课程中多有涉及。 1. 准备工作 打开一个网站(此处以https://www.processon.com/为例) 手工登录 关闭 重开该网站发现已经

Selenium中的option用法实例

Selenium中的option用法实例 在上一篇文章Selenium中免登录的实现方法一option中我们用到了option,而option的用法是很多的,本文举几个例子 关于无头浏览器,也属于option的一种,但我们单独开个篇幅讲一下 看完你会发现多数是参数形式的,那chrome作为这么一个大