获取xhr请求工具类

获取xhr请求工具类importjsonfr webdriverimp xhr logs chrome log xhr array fortypelogin log types perfs chrome get log typelog forrowinperf

import json from selenium import webdriver from selenium.webdriver import DesiredCapabilities def get_xhr_logs(chrome): log_xhr_array = [] for typelog in chrome.log_types: perfs = chrome.get_log(typelog) for row in perfs: log_data = row message_ = log_data['message'] try: log_json = json.loads(message_) log = log_json['message'] if log['method'] == 'Network.responseReceived': # 去掉静态js、css等,仅保留xhr请求 type_ = log['params']['type'] if type_ == "XHR": log_xhr_array.append(log) except: pass return log_xhr_array def get_log_options(): option = webdriver.ChromeOptions() option.add_argument('--no-sandbox') option.add_argument('--headless') option.add_argument("--disable-extensions") option.add_argument("--allow-running-insecure-content") option.add_argument("--ignore-certificate-errors") option.add_argument("--disable-single-click-autofill") option.add_argument("--disable-autofill-keyboard-accessory-view[8]") option.add_argument("--disable-full-form-autofill-ios") option.add_argument('user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:55.0) Gecko/ Firefox/55.0') option.add_experimental_option('w3c', False) option.add_experimental_option('perfLoggingPrefs', { 'enableNetwork': True, 'enablePage': False, }) return option def get_caps(): caps = DesiredCapabilities.CHROME caps['loggingPrefs'] = { 'browser': 'ALL', 'performance': 'ALL', } caps['perfLoggingPrefs'] = { 'enableNetwork': True, 'enablePage': False, 'enableTimeline': False } return caps 

使用:

# 拦截进入详情页面,使用selenium绕过反爬 class SeleniumMiddlewareDetail: def process_response(self, request, response, spider): if request.meta['code'] == 1: chrome = spider.chrome chrome.get(request.url) # network日志 logs = get_xhr_logs(chrome) return HtmlResponse(url=spider.chrome.current_url, body=bytes(json.dumps(logs), encoding='utf8'), encoding="utf8", request=request)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/201033.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午10:05
下一篇 2026年3月20日 上午10:05


相关推荐

  • js中prototype的用法「建议收藏」

    js中prototype的用法「建议收藏」看例子就懂了例1可以在外部使用prototype为自定义的类型添加属性和方法<scripttype=”text/javascript”>functionAclass(){this.Property=1;this.Method=function(){alert(1);}}Aclass…

    2022年7月23日
    16
  • yui3:widget

    yui3:widgetWidget类包含什么?widget类的结构和职能widget类基本的属性渲染方法渐进增强标签结构class名和CSS默认UI事件类的结构和职责  Widget类的结构和职责 Widget类是一个用于创建widgets的基础类。Widget类可以实例化,但是一般都是用它作为基础类,扩展创建widgets,这些通过扩展创…

    2022年7月12日
    31
  • python常见的数据类型有哪些?

    python常见的数据类型有哪些?变量用来存储数据,那么大家有没有想过,我们应该让变量占用多大空间,保存什么样的数据呢?在讲解变量的类型之前,我们先来看一个生活中的例子,例如,我们要运送一台电脑,大卡车和小轿车都可以完成,但是,如果使用大卡车运送一台电脑,显然有点小题大做,浪费了大卡车的空间,如图1所示。图一:卡车和轿车运输一台电脑同理,如果使用变量存储数据时,为了更充分利用内存空间,我们可以为变量指定不同的数据类型。Python中常见的数据类型如图2所示图二:Python变量数据类型图二中罗列了Python中常见的数据类型,下

    2022年6月4日
    31
  • compoundbutton调用setChecked触发onCheckedChanged的终极解决方案;「建议收藏」

    compoundbutton调用setChecked触发onCheckedChanged的终极解决方案;「建议收藏」当我们想要实现了一个简单的有状态切换的控件的时候,我们通常会去实现,CompoundButton来实现我们想要的一个效果,最常见的就是系统的CheckBox,但是在使用的过程中,我们会发现一个问题就是:我们在使用SetChecked的时候,总是会触发,onCheckedChanged这个回掉方法;那么怎么样才能做到不触发这个回掉方法呢?首先我们需要知道为什么会触发这个方法;查看源码如下:pu

    2022年5月4日
    76
  • jquery 判断array中是否包含指定字符串

    jquery 判断array中是否包含指定字符串

    2021年7月19日
    68
  • WebIDE:Firefox中的Web IDE「建议收藏」

    WebIDE:Firefox中的Web IDE「建议收藏」Mozilla在其浏览器的每日构建版本中增加了一个IDE,用于在FirefoxOS设备和模拟器上创建、编辑、运行和调试Web应用程序,而且计划将该IDE扩展到移动设备上的所有主流浏览器。\WebIDE基于先前的FirefoxOS应用程序管理器构建,但包含了部署和调试工具,以及基于CodeMirror的代码编辑器和tern.js代码分析框架。为了简化开发设置,该IDE为开发人员提供了基于模板的样…

    2022年10月17日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号