补环境——A股市场

news2024/11/16 19:56:42

补环境

吐环境
1.Proxy对象

Proxy对象由两个部分组成:target、handler

target:目标对象
handler:是一个对象,声明了代理target的指定行为,支持的拦截操作,一共13种:

  • get(target,propKey,receiver):拦截对象属性的读取。
    • target: 目标对象
    • propKey: 被获取的属性名。
    • receiver: Proxy 或者继承 Proxy 的对象
  • set(target,propKey,value,receiver):拦截对象属性的设置,返回一个布尔值(修改成功)。
    • target: 目标对象
    • propKey : 被获取的属性名。
    • value: 新属性值。
    • receiver: Proxy 或者继承 Proxy 的对象

一般的补环境的是通过运行程序后的undefined报错去一点一点分析,一点一点的去补一些环境.

所以我们使用 Proxy 对全局遍历window、document、navigator等常见环境检测点进行代理,拦截代理对象的读取、函数调用等操作,并通过控制台输出,这样的话我们就能够实现检测环境自吐的功能,后续我们再针对吐出来的环境统一的进行补环境,这样就会方便的多。

2.案例
var target = {
    name: 'XT',
    age: 21,
    aa: function () {
        console.log(111)
    }
};
//target是对象,handler是拦截操作

var p = new Proxy(target, {
    //获取对象
    get:function (target, propertyKey, receiver) {
        //target  目标对象name:'JACK',age:'18'
    //    propertyKey :被获取属性的名字
    //     receiver 代理的对象
        console.log(target)
        console.log(propertyKey)
        console.log(receiver)
        console.log(target, propertyKey, receiver)

    },
    // //设置对象
    // set: function (target,propertyKey,value,receiver) {
    // //    target  目标对象
    // //     propertyKey  设置的属性
    // //    value   设置的属性值
    // //     receiver 代理器对象
    //     console.log(target,propertyKey,value,receiver)
    // }
})

console.log(p.name);

// p.user = 'aa'

返回结果

在这里插入图片描述

案例2

在这段代码中,target 是被 Proxy 包装的原始对象,propertyKey 是被访问或设置的属性名,而 receiver 是最初被调用的对象,通常是代理对象本身。

在实际的浏览器环境中,例如 windowdocumentnavigator 等,这些参数的含义如下:

  1. target

    • targetProxy 构造函数的第一个参数,它是原始对象,即你想要对其进行代理的对象。在浏览器环境中,如果你创建了 windowdocumentnavigator 的代理,target 就会是这些全局对象之一。
  2. propertyKey

    • propertyKey 是被访问或设置的属性的名称。在浏览器环境中,如果你尝试访问 window.locationdocument.titlepropertyKey 将分别是 "location""title"
  3. receiver

    • receiver 是最初被调用的对象,通常是代理对象本身。在 getset 陷阱(trap)中,receiver 是最初被调用的对象,它可以是代理对象或继承代理对象的任何对象。

以下是一个实际的例子,展示了如何在浏览器环境中使用 Proxy 来代理 window 对象,并记录属性的访问:

// 原始的 window 对象
var target = window;

// 创建一个代理来拦截对 window 对象的访问
var p = new Proxy(target, {
    get: function (target, propertyKey, receiver) {
        console.log('访问属性:', propertyKey);
        // 返回原始属性值
        return Reflect.get(target, propertyKey, receiver);
    },
    set: function (target, propertyKey, value, receiver) {
        console.log('设置属性:', propertyKey, '值:', value);
        // 设置原始属性值
        return Reflect.set(target, propertyKey, value, receiver);
    }
});

// 通过代理访问和设置属性
console.log(p.location.href); // 访问属性: location
p.document.title = '新标题'; // 设置属性: title 值: 新标题

在这个例子中,当通过代理对象 p 访问 location.href 时,get 陷阱会被触发,并打印出 "访问属性: location"。然后,当通过 p 设置 document.title 时,set 陷阱会被触发,并打印出 "设置属性: title 值: 新标题"

请注意,直接对全局对象如 windowdocumentnavigator 使用 Proxy 可能会导致意外的副作用,因为这些对象通常由浏览器管理,并且它们的行为可能依赖于内部状态和上下文。在实际开发中,应谨慎使用 Proxy 来代理这些全局对象。

A股市场同花顺
确定需求:

这里我只爬取序号,代码,名称,现价,涨跌幅这几个字段。并实现翻页功能。

在这里插入图片描述

cookie反爬!!!

1.通过油猴脚本找到变化的cookie值

在这里插入图片描述

吐环境报错可能是因为之前的方法为空。

在这里插入图片描述
在这里插入图片描述

TypeError: n.attachEvent is not a function

在这里插入图片描述

通过打断点的方式,可以发现q的值是true,所以在浏览器环境中,它使用的是addEventListener方法,而不是attachEvent方法。

那么node环境中报错显示attachEvent undefined,说明q的值是False。这里我们验证一下
在这里插入图片描述

可以看到q确实是False。那么我们就直接补q,给q赋值

我们补充addEvenListener方法。

方法: set   对象: window   属性: addEventListener   属性类型: string   属性值类型: undefined
方法: set   对象: window   属性: addEventListener   属性类型: string   属性值类型: function
方法: get   对象: window   属性: document   属性类型: string   属性值类型: undefined
方法: get   对象: window   属性: addEventListener   属性类型: string   属性值类型: object

在这里插入图片描述

调用生成cookie值的方法时候,报错。这时,要把所有undefined的对象属性补齐。

补navigator

在这里插入图片描述

分析网页信息

在这里插入图片描述

在这里插入图片描述

确定S生成的位置

找到报错的问题点

在这里插入图片描述

在这里插入图片描述

再次尝试补document对象中的documentEelement属性,发现程序跑通了。

在这里插入图片描述

# 使用BeautifulSoup解析HTML内容
soup = BeautifulSoup(html_content, 'html.parser')

# 找到表格
table = soup.find('table', class_='m-table m-pager-table')

# 初始化一个列表来存储提取的数据
extracted_data = []

# 遍历表格中的所有行
for row in table.find_all('tr'):
    # 获取当前行的所有单元格
    cols = row.find_all('td')
    # 如果单元格的数量正确,提取数据
    if len(cols) == 5:
        # 提取序号,代码,名称和现价
        serial_number = cols[0].text.strip()
        code = cols[1].text.strip()
        name = cols[2].text.strip()
        current_price = cols[3].text.strip()
        # 将提取的数据添加到列表中
        extracted_data.append({
            '序号': serial_number,
            '代码': code,
            '名称': name,
            '现价': current_price
        })

在这里插入图片描述

结果

在这里插入图片描述

报错

加入翻页逻辑之后。有时候会出现这种报错,说明是被反爬了,之后会尝试解决一下

在这里插入图片描述

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

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

相关文章

DataGrip使用ssh连接数据库的操作流程

1 选择数据源种类 2 配置ssh 3 填写host、port和认证方式 我选择的密码方式,也可选择其他方式连接: 本文由博客一文多发平台 OpenWrite 发布!

内网安全--隧道技术-MSF上线本地

免责声明:本文仅做技术交流与学习... 不得不说,小白最近也是用上了viper,这里要特别感谢一下my bro 北岭敲键盘的荒漠猫 MSF--viper: --生成马子-->上线 --进入meterpreter. 1-查看路由,添加路由. 查看路由信息 : run autoroute -p run post/multi/manage/autoroute 添加…

PostgreSQL发展史

PostgreSQL是一个开源的对象-关系型数据库管理系统(ORDBMS),其历史可以追溯到上世纪80年代。以下是对PostgreSQL发展史的深入解析: 1980年代:起源 1.Ingres 项目 1977年,Michael Stonebraker 和他的团队…

数字信号处理实验三:IIR数字滤波器设计及软件实现

一、实验目的 1. 掌握MATLAB中进行IIR模拟滤波器的设计的相关函数的应用; 2. 掌握MATLAB的工具箱中提供的常用IIR数字滤波器的设计函数的应用; 3.掌握MATLAB的工具箱中提供的模拟滤波器转数字滤波器的相关的设计函数的应用。 二、实验内容 本实验为…

INDICATOR 再c嵌入sql环境中的作用

在C语言嵌入SQL(Embedded SQL)的环境中,INDICATOR关键字用于处理数据库中的NULL值,以及管理与之相关联的宿主变量(host variables)。具体来说,它的作用主要体现在以下几个方面: NUL…

海外仓ERP系统:赋能海外仓,实现标准化管理

随着业务规模的不断发展和业务类型的复杂度逐渐提升,传统的海外仓管理模式已经很难适应现在的情况了。对海外仓企业来说,一套合适的海外仓管理erp系统可以起到很大的辅助作用。 不过很多小型海外仓企业会纠结于是同时选择企业erp系统和海外仓管理系统&a…

java的方法重写

重写的概述 重写是基于继承来说的,因为父类的方法需求不满足于子类,所以就要在进行方法重写,如果不知道继承是啥可以看我上一篇笔记 在这里用代码举个栗子 例如:我们定义了一个动物类代码如下: public class Animal…

地下停车场FM信号覆盖系统技术原理用与应用

随着我国城市化水平的快速推进与房地产的快速发展,城市停车场称为每栋建筑物的硬性配套建筑,尤其是商业综合体、医院、政府机关、机场、高铁站等场所出现了超大规模停车场,停放车辆可达数千辆,停车场的智能化与信息化水平也越来越…

实时合成 1 秒频订单簿快照:DolphinDB INSIGHT 行情插件与订单簿引擎应用

INSIGHT 是华泰证券依托大数据存储、实时分析等领域的技术积累,整合接入国内多家交易所高频行情数据,为投资者提供集行情接入、推送、回测、计算及分析等功能于一体的行情数据服务解决方案。基于 INSIGHT 官方提供的行情数据服务 C SDK(TCP 版…

二叉树的链式结构(二叉树)与顺序结构(堆)---数据结构

一、树的概念与结构 1、树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。我们常把它叫做树,是因为它看起来像一棵倒挂的树,它的根是朝上的,而叶是朝下的。 下面…

SqliSniper:针对HTTP Header的基于时间SQL盲注模糊测试工具

关于SqliSniper SqliSniper是一款基于Python开发的强大工具,该工具旨在检测HTTP请求Header中潜在的基于时间的SQL盲注问题。 该工具支持通过多线程形式快速扫描和识别目标应用程序中的潜在漏洞,可以大幅增强安全评估过程,同时确保了速度和效…

Caused by: java.lang.IllegalArgumentException: Unknown flag 0x1000

Dubbo使用Tomcat安装admin2.5.x管理平台时发生的错误: Caused by: java.lang.IllegalArgumentException: Unknown flag 0x1000 解决方法: 将本地的jdk环境变量切换成jdk8即可。

STM32简易音乐播放器(HAL库)

一、设计描述 本设计以STM32MP157A单片机为核心控制器,加上其他的模块一起组成基于单片机的音乐盒的整个系统,通过不同频率的PWM使蜂鸣器播放音乐,通过按键中断实现歌曲切换,音量调节,定时器中断实现播放速度调节&…

每日复盘-20240528

今日重点关注: 20240528 六日涨幅最大: ------1--------300956--------- 英力股份 五日涨幅最大: ------1--------301361--------- 众智科技 四日涨幅最大: ------1--------301361--------- 众智科技 三日涨幅最大: ------1--------301361--------- 众智科技 二日涨…

三维场景感知之三维目标检测方向入门

三维目标检测入门 1 文档需知2 基础知识深度学习基础必上手项目科研研究必知道的论文门户深度学习必看论文 3 目标检测入门知识二维目标检测必看论文 4 三维目标检测入门知识三维目标检测必熟悉数据集三维目标检测点云分类分割预备知识三维目标检测必熟悉,必跑通&am…

C语言-01_HelloWord

文章目录 1.C程序运行机制2.HelloWorld的剖析① main()② 函数体③ printf()④ 标准库、头文件 3.输出3.1 printf()标准格式3.2 占位符3.3 输出格式 1.C程序运行机制 过程1:编辑 编写C语言源程序代码,并已文件的形式存储到磁盘中。源程序文件以“.c”作…

Ai终点站,全系统商业闭环矩阵打造,帮电商、实体降70%成本,12款Ai联合深度实战

说白了,你之前5个人的团队,当团队人数不变的情况下,借助于ChatGPT和各种软件的结合,赋能电商直播带货,可以让之前一年销售额2.000万变成2.500万或者是3.000万,这就是这套课程的核心作用: 【1】系统课程从1…

ThingsBoard物联网网关在智慧城市数据采集中的应用

智慧城市由监控中心、采集网关、前端采集设备、前端感应执行器组成。 为何选用ThingsBoard作为平台 监控中心为物联网平台,该平台包含云计算、大数据、人工智能、物联网、GIS、云安全等主要模块,具备数据采集、数据交换、超大规模计算、数据分析、数据应…

SpaceX间接「颠覆」了手机?星链如何直连手机通信?

SpaceX 旗下的星链项目推出了一个极具颠覆性的技术——direct to cell(DTC),即通过卫星直接与手机建立通信。这项技术无需对手机进行任何改装,大多数普通手机都可以直接接入星链的卫星网络,实现全球范围内的手机信号覆…