补环境——A股市场

补环境

吐环境
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.mzph.cn/diannao/18460.shtml

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

相关文章

Leetcode:找出峰值

普通版本 题目链接&#xff1a;2951. 找出峰值 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<int> findPeaks(vector<int>& mountain) {int sz mountain.size();vector<int> newMountain;for(int i 1;i < sz-1;i){…

return _VF.meshgrid(tensors, **kwargs) 的参考解决方法

文章目录 写在前面一、问题描述二、解决方法三、调用示例参考链接 写在前面 自己的测试环境&#xff1a; Ubuntu20.04, anaconda 一、问题描述 /home/wong/ProgramFiles/anaconda3/envs/pytorch_env/lib/python3.8/site-packages/torch/functional.py:504: UserWarning: tor…

Java特性之设计模式【备忘录模式】

一、备忘录模式 概述 备忘录模式&#xff08;Memento Pattern&#xff09;保存一个对象的某个状态&#xff0c;以便在适当的时候恢复对象&#xff0c;备忘录模式属于行为型模式 备忘录模式允许在不破坏封装性的前提下&#xff0c;捕获和恢复对象的内部状态 主要解决&#xff…

【硬核测评】猫咪主食冻干测评揭秘SC、希喂、爱立方真实对比测评

主食冻干喂养是否必要&#xff1f; 来自七年经验的铲屎官明确告诉你&#xff0c;这是非常必要的喂养方式&#xff01; 随着宠物经济的蓬勃发展和科学养宠知识的普及&#xff0c;如今养猫已不仅仅是让猫咪吃饱那么简单。越来越多的养猫人开始重视猫咪的饮食健康。大量实际喂养案…

电脑如何远程访问?

【天联】的使用场景 电脑远程访问在现代科技的发展中扮演了重要的角色。对于企业和个人用户来说&#xff0c;远程访问的便利性提供了许多机会和可能性。作为一种高效的工具&#xff0c;【天联】具有广泛的应用场景&#xff0c;可以实现异地统一管理、协同办公以及远程数据采集…

C++单元测试覆盖率统计工具:GCOV+LCOV

1. gcov基础 1.1 gcov概述 gcov是GNU编译器集合&#xff08;GCC&#xff09;的一个测试覆盖分析工具&#xff0c;它能够测量程序的执行覆盖率。gcov可以分析源代码中哪些行被执行过&#xff0c;哪些分支被采取过&#xff0c;以及哪些函数被调用过。这对于软件开发者来说是一个…

Spring AOP原理详解:动态代理与实际应用

1. Spring AOP概述 1.1 什么是AOP AOP&#xff08;Aspect-Oriented Programming&#xff0c;面向切面编程&#xff09;是一种编程范式&#xff0c;旨在将横切关注点&#xff08;Cross-Cutting Concerns&#xff09;从业务逻辑中分离出来。横切关注点是指那些分散在应用程序多…

Android基础-Service的介绍

在Android系统中&#xff0c;Service是一个重要的后台组件&#xff0c;用于执行长时间运行的操作&#xff0c;而不需要提供用户界面。以下是对Service的功能、作用以及生命周期的详细介绍。 Service的功能和作用 后台执行&#xff1a; Service允许应用程序在后台执行操作&…

【数据结构】AVL树——平衡二叉搜索树

个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 祝福语&#xff1a;愿你拥抱自由的风 目录 二叉搜索树 AVL树概述 平衡因子 旋转情况分类 左单旋 右单旋 左右双旋 右左双旋 AVL树节点设计 AVL树设计 详解单旋 左单旋 右单旋 详解双旋 左右双旋 平衡因子情况如…

阿里开源React应用动效解决方案:ant-motion

ant-motion&#xff1a;简化动效开发&#xff0c;提升用户体验 - 精选真开源&#xff0c;释放新价值。 概览 Ant Motion是由Ant Design团队精心打造&#xff0c;专为React应用设计的动画规范和组件库。它不仅仅是一套动画规范&#xff0c;更是一个完整的解决方案&#xff0c;旨…

C# yolov8 TensorRT Demo

C# yolov8 TensorRT Demo 目录 效果 说明 项目 代码 下载 效果 说明 环境 NVIDIA GeForce RTX 4060 Laptop GPU cuda12.1cudnn 8.8.1TensorRT-8.6.1.6 版本和我不一致的需要重新编译TensorRtExtern.dll&#xff0c;TensorRtExtern源码地址&#xff1a;https://githu…

2024年JAVA、C++、Pyhton学哪种语言更容易进国央企?

对于不同编程语言在进入国有企业的观点大体是正确的&#xff0c;不过在实际选择时还需考虑一些因素。我这里有一套编程入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习编程&#xff0c;不妨点个关注&#xff0c;给个评论222&#xff0c;私信…

【CSDN独家公开】Python解析.SchDoc格式文件转换为json文件

前情提要 因工作需求&#xff0c;需要解析.SchDoc格式文件&#xff0c;提取文本和位置关系&#xff0c;通常方式是转换为图片或PDF&#xff0c;再进行OCR&#xff0c;但是这样识别精度太低了 Github找了好些项目&#xff0c;都不支持 PyAltium不支持 https://github.com/plu…

apexcharts数据可视化之饼图

apexcharts数据可视化之饼图 有完整配套的Python后端代码。 本教程主要会介绍如下图形绘制方式&#xff1a; 基础饼图单色饼图图片饼图 基础饼图 import ApexChart from react-apexcharts;export function SimplePie() {// 数据序列const series [44, 55, 13, 43, 22]// …

AI大模型:掌握未知,开启未来

AI大模型的工作原理 AI大模型是指通过大量数据和复杂算法训练出的能够理解和生成自然语言文本的人工智能模型。它们背后的核心技术主要包括深度学习、神经网络和自然语言处理。以下是详细的工作原理以及通俗易懂的类比&#xff1a; 1. 数据收集和预处理 AI大模型的训练首先需…

【面试】什么是Java堆内存溢出?

目录 1. 概念2. 堆内存溢出的原因2.1 内存泄露2.2 堆内存设置过小2.3 大量对象创建2.4 静态集合类2.5 外部资源没有及时释放 3. 避免内存溢出的建议 1. 概念 1.Java堆内存溢出&#xff08;Java Heap Memory Overflow&#xff09;。2.是指Java虚拟机&#xff08;JVM&#xff09…

java —— 常用类

一、System 类 System 类内部的构造方法是 private 修饰的&#xff0c;所以不能实例化&#xff0c;普通方法均为静态方法。 &#xff08;一&#xff09;.currentTimeMillis() 括号内无参数&#xff0c;返回值为距离1970年1月1日0时0分0秒之间的毫秒数。 long timeSystem.cu…

全面解析开源RTSP流媒体服务器:功能、性能与应用场景对比

本文综合分析了多个开源RTSP流媒体服务器&#xff0c;包括EasyDarwin、RtspServer、SRS等&#xff0c;深入探讨它们的功能特性、技术实现、性能对比及应用场景&#xff0c;旨在为开发者提供全面的选型参考。 文章目录 开源RTSP流媒体服务器概述RTSP协议简介开源RTSP服务器的重要…

【JavaScript】P5 数组与常量

目录 1 数组1.1 数组的声明1.2 数组的基本术语 2 常量 1 数组 如果将多个数据存储在单一个变量名下 -> 数组。 数组&#xff08;array&#xff09;&#xff0c;可以将一组数据存储在单个变量名下。 1.1 数组的声明 let 数组名 [数据1, 数据2, ..., 数据n]数组是有序的&a…

APM2.8内置罗盘校准

如果你有外置罗盘&#xff0c;可以不用校准内置罗盘&#xff0c;可以忽略此文。推荐使用外置罗盘&#xff0c;内置罗盘容易受干扰。 使用内置罗盘需要插入飞控GPS接口旁边的跳线帽。如图&#xff1a; 如果要使用内置罗盘&#xff0c;而又加了GPS的&#xff0c;记得一定要把GPS…