Python |Selenium Wire 扩展Selenium的Python绑定,使您能够检查浏览器发出的请求。

这篇具有很好参考价值的文章主要介绍了Python |Selenium Wire 扩展Selenium的Python绑定,使您能够检查浏览器发出的请求。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  前面介绍了Seleniums的入门应用,现在为大家介绍它的一个插件Selenium Wire。现如今部分网站都设置了反爬机制,常见的就是在接口请求头中有js代码生成的请求参数,那么一般通过js破解参数难度较大,于是就可以借助Selenium Wire来获取解析后的参数,可以实现这样一个功能

Selenium Wire简单介绍

  Selenium Wire扩展了Selenium的Python绑定,使您能够访问浏览器发出的底层请求。您以与使用Selenium相同的方式编写代码,但是您获得了额外的api,用于检查请求和响应,并动态地对它们进行更改。

工作原理

  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']
        )

Prints:

https://www.google.com/ 200 text/html; charset=UTF-8
https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_120x44dp.png 200 image/png
https://consent.google.com/status?continue=https://www.google.com&pc=s&timestamp=1531511954&gl=GB 204 text/html; charset=utf-8
https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png 200 image/png
https://ssl.gstatic.com/gb/images/i2_2ec824b0.png 200 image/png
https://www.google.com/gen_204?s=webaft&t=aft&atyp=csi&ei=kgRJW7DBONKTlwTK77wQ&rt=wsrt.366,aft.58,prt.58 204 text/html; charset=UTF-8
...

可以看到遍历返回了请求的URL,以及状态码和Content-Type值,那么我将通过一个小案例来实现。

实际案例

  通过某网站的数据接口来获取请求的接口的headers。下面这个网站就设有反爬机制,通过接口看到有数据返回。Python |Selenium Wire 扩展Selenium的Python绑定,使您能够检查浏览器发出的请求。
  经过我的反复测试观察发现在它的请求headers中有一个参数名为ehsy-verify的字段。
Python |Selenium Wire 扩展Selenium的Python绑定,使您能够检查浏览器发出的请求。
  通过postman POST请求方式模拟请求这个接口发现只有带上这个参数值才能够正常的返回得到数据。这样的话就得出这是一个JS加密后的参数,按照以往正常的方法就得去找到对应的JS代码逆向解析出它是怎样产生的,过程比较复杂,难度较大,那么现在就可以借用Selenium Wire来获取的得到这个接口的请求headers,ehsy-verify的值就在headers中。代码实现如下:

from selenium.webdriver.chrome.options import Options as ChromeOptions
from seleniumwire import webdriver

def getweb():
    chrome_options = ChromeOptions()
    chrome_options.add_argument('--headless')  # 配置对象添加开启无界面模式的命令
    chrome_options.add_argument('--no-sandbox')  # 解决DevToolsActivePort文件不存在的报错
    chrome_options.add_argument('window-size=1920x1080')  # 指定浏览器分辨率
    chrome_options.add_argument('--disable-gpu')  # 谷歌文档提到需要加上这个属性来规避bug # 禁用GPU加速
    chrome_options.add_argument('--start-maximized')  # 浏览器最大化
    chrome_options.add_argument(
        '--user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"')  # 设置请求头的User-Agent
    chrome_options.add_argument('--incognito')  # 隐身模式(无痕模式)
    browser = webdriver.Chrome(
        executable_path='C:\Program Files\Google\Chrome\Application\chromedriver.exe',
        options=chrome_options
    )
    return browser
def get_headers():
    browser = getweb()
    browser.get('https://xxxxxxxxxxxxxxxxxxxxx/index?catId=2249&parentId=2961&name=%E7%BB%BC%E5%90%88%E5%A5%97%E8%A3%85')
    for requests in browser.requests:
        if requests.headers["ehsy-verify"] != None :
            token = requests.headers["ehsy-verify"]
get_headers()

Python |Selenium Wire 扩展Selenium的Python绑定,使您能够检查浏览器发出的请求。
  从上面的代码可以看出也涉及到了selenium的一些基础应用,对seleniumwire 的使用就涉及几行简短的代码,对比去通过逆向解析js代码而言就显得非常的简单了。可以看到最后得到了ehsy-verify的结果,在后续的爬取数据中用到这个ehsy-verify值时就可以直接使用,当然这个值也是具有一定的实效性的,当然你也可以编写定时程序去运行脚本得到它的值。

小结

  通过一个简单的小例子实现了接口的请求的拦截,除此之外,它还可以实现请求对象、响应对象、添加请求头、替换已存在的请求头、添加响应头、增加请求参数、在POST请求体中更新JSON等操作。如果大家感兴趣的话后序在继续分享更新。文章来源地址https://www.toymoban.com/news/detail-512970.html

到了这里,关于Python |Selenium Wire 扩展Selenium的Python绑定,使您能够检查浏览器发出的请求。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • selenium+python切换浏览器窗口

    selenium在当前浏览器页面打开了新的窗口,此时如果要聚焦到新开的浏览器窗口,就需要切换到新的窗口,切换窗口的操作,具体selenium+python示例如下:

    2024年02月15日
    浏览(45)
  • Python Selenium 浏览器打印预览

    在Web开发中,打印预览是一个常见的功能需求。通过打印预览,我们可以预览和调整网页的打印布局、样式和内容。Python的Selenium库是一个强大的工具,可以自动化浏览器操作,包括打印预览。本文将介绍如何使用Python Selenium库来实现浏览器的打印预览功能。 首先,我们需要

    2024年02月03日
    浏览(71)
  • Python控制浏览器——selenium模块

    【1】安装selenium 如果安装慢可以指定用国内源 【2】安装浏览器驱动 Chrome驱动地址:[http://chromedriver.storage.googleapis.com/index.html] Edge驱动安装地址:[https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/?form=MA13LH] Firefox驱动安装地址:[https://github.com/mozilla/geckodriver/releases] 安装成

    2024年04月10日
    浏览(48)
  • python爬虫之selenium模拟浏览器

    之前在异步加载(AJAX)网页爬虫的时候提到过,爬取这种ajax技术的网页有两种办法:一种就是通过浏览器审查元素找到包含所需信息网页的真实地址,另一种就是通过selenium模拟浏览器的方法[1]。当时爬的是豆瓣,比较容易分析出所需信息的真实地址,不过一般大点的网站像

    2024年02月03日
    浏览(62)
  • Python + Selenium 处理浏览器Cookie

    工作中遇到这么一个场景:自动化测试登录的时候需要输入动态验证码,由于某些原因,需要从一个已登录的机器上,复制cookie过来,到自动化这边绕过登录。 浏览器的F12里复制出来的cookie内容是文本格式的: 这里需要把cookie文本处理为name和value格式的字典形式,这个是S

    2024年02月13日
    浏览(53)
  • Python 和 Selenium 的浏览器爬虫

    Selenium 是一款强大的基于浏览器的开源自动化测试工具,最初由 Jason Huggins 于 2004 年在 ThoughtWorks 发起,它提供了一套简单易用的 API,模拟浏览器的各种操作,方便各种 Web 应用的自动化测试。 它的取名很有意思,因为当时最流行的一款自动化测试工具叫做 QTP,是由 Mercur

    2024年02月08日
    浏览(62)
  • Python爬虫(2)-Selenium控制浏览器

    Selenium中提供了不少的方法来操作浏览器 使用driver.get(‘网址’)的方式来打开浏览器 driver.refresh() 浏览器切换标签的方法就是, driver.current_window_handle 用selenium点击新打开了一个网页,需要告知selenium目前这个窗口是新的窗口,那么它才能早新的页面进行操作不然的话就无法操

    2024年02月08日
    浏览(57)
  • Selenium Wire编辑header破解反爬机制和访问限制

    介绍 Selenium Wire扩展了Selenium的Python绑定,使您能够访问浏览器发出的底层请求。您已使用Selenium相同的方式编写代码,但是您获得了额外的api,用于检查请求和响应,并动态地对它们进行更改。(注:意思是这个不仅包含了selenium的功能,还额外增加了新的扩展功能,引用s

    2024年02月16日
    浏览(43)
  • selenium+python切换浏览器窗口--详细讲解

    在浏览器页面打开窗口后,有时点击按钮会打开新的页面,我们需要切换到新的窗口才能去定位操作,不然无法操作,切换窗口代码如下

    2024年02月14日
    浏览(47)
  • python + selenium 自动下载浏览器驱动文件

    python + selenium 自动下载浏览器驱动文件

    2024年02月02日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包