JavaScript_00000_00001

【JS 逆向百例】吾爱破解2022春节解题领红包之番外篇 Web 中级题解 关注微信公众号:K哥爬虫,持续分享爬虫进阶、JS/安卓逆向等技术干货! 文章目录 逆向目标 HLS 流媒体传输协议 SAZ 分析 JS 逆向 TS 解密合并转换 逆向目标 本次逆向的目标来源于吾爱破解 2022 春节解题领红包之番外篇 Web 中级题,吾爱破解每年都会有派送红包活动(送吾爱币),需要大家使出看家逆向本领来分析内容获得口令红包,今年一共有五个题,一个送分题,两个 Windows 题、一个 Android 题和一个 Web 题,本文分析的正是 Web 题,吾爱有规定活动结束前.. 阅读详情

contents

DOM

DOM(Document Object Model),文档对象模型。

节点的属性:

 ndoeNamenodeTypenodeValue
文档节点#document9null
元素节点标签名1null
属性节点属性名2属性值
文本节点#text3文本内容
  • document.getElementById() 根据id属性值获取一个元素节点对象。
  • 元素节点.firstChild; 获取元素节点的第一个子节点,一般为文本节点。
  • 元素节点.getAttributeNode(“属性名”);

获取元素节点:通过document对象调用。

  • getElementById() 通过id属性获取一个元素节点对象。
  • getElementsByTagName() 通过标签名获取一组元素节点对象。
  • getElementsByName() 通过name属性获取一组元素节点对象。

获取元素节点的子节点:通过具体的元素节点调用。

  • getElementsByTagName() 方法,返回当前节点的指定标签名后代节点。
  • childNodes 属性,表示当前节点的所有子节点。
  • firstChild 属性,表示当前节点的第一个子节点。
  • firstElementChild 属性,表示当前节点的第一个子元素。
  • lastChild 属性,表示当前节点的最后一个子节点。
  • lastElementChild 属性,表示当前节点的最后一个子元素。

获取父节点和兄弟节点:通过具体的节点调用。

  • parentNode 属性,表示当前节点的父节点。
  • previousSibling 属性,表示当前节点的前一个兄弟节点。
  • previousElementSibling 属性,表示当前节点的前一个兄弟元素。
  • nextSibling 属性,表示当前节点的后一个兄弟节点。

元素节点的属性获取:元素对象.属性名
例:
element.value
element.id
element.className

设置元素对象.属性名=新值
例:
element.value = “hello”
element.id = “id01”
element.className = “newClass”

其他属性

  • nodeValue 文本节点可以通过nodeValue属性获取和设置文本节点的内容。
  • innerHTML 元素节点通过该属性获取和设置标签内部的html代码。

使用CSS选择器进行查询

  1. querySelector()
  2. querySelectorAll()
    这两个方法都是用document对象来调用,两个方法使用相同,都是传递一个选择器字符串作为参数,方法会自动根据选择器字符串去网页中查找元素。不同的地方是querySelector()只会返回找到的第一个元素,而querySelectorAll()会返回所有符合条件的元素。

节点的修改
• 这里的修改我们主要指对元素节点的操作。
• 创建节点
– document.createElement(标签名)
• 删除节点
– 父节点.removeChild(子节点)
• 替换节点
– 父节点.replaceChild(新节点 , 旧节点)
• 插入节点
– 父节点.appendChild(子节点)
– 父节点.insertBefore(新节点 , 旧节点)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	
	<body>
		
		<button id="btn">我是一个按钮</button>
		
		<script type="text/javascript">
		
			console.log(document);
			
			//获取到button对象
			var btn = document.getElementById("btn");
			
			//修改按钮上显示的文字
			btn.innerHTML = "I'm Button";
			
		</script>
		
	</body>
	
</html>

事件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	
	<body>
		
		<button id="btn" onmousemove="alert('宋江');">我是一个按钮</button>
		
		<button id="btn1">我是一个按钮</button>
		
		<script type="text/javascript">
			
			//获取按钮对象
			var btn = document.getElementById("btn1");
			
			btn.onclick = function(){
				
				alert("卢俊义");
				
			};
			
			
		</script>
		
	</body>
	
</html>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		
		<script type="text/javascript">
		
			window.onload = function(){
				
				var btn = document.getElementById("btn");
				
				btn.onclick = function(){
					alert("hi");
				};
				
			};
			
		</script>
		
	</head>
	
	<body>
		
		<button id="btn">点我一下</button>
	
	</body>
	
</html>
js实现字母+5位数的编号,满99999自动变字母(含源码) 目标: 实现字母+5位数自增编号,当编号满99999时转到下一个字母,如A00001,...,A99999,B00001,...,B99999,C00001,... 准备工作: 在白码低代码开发平台创建参数表记录当前的字母数值和编号数值。为了实现字母自增,用数值来代表字母,A的10进制数为10。 实现步骤: 1、创建功能,并创建“数据-获取-参数表”步骤从参数表获取参数 2、创建“编程”步骤,获取上一步的编号参数 //获取编号参数 letparam=await$... 阅读详情

相关推荐

Vue项目播放m3u8视频流:从协议原理到video.js组件封装实践

HLS(HTTP Live Streaming)是Apple提出的流媒体传输协议,它将视频切片为多个ts分片,并通过m3u8索引文件进行管理。由于Chrome、Firefox等主流浏览器不支持原生HLS解析,开发者常遇到video标签黑屏问题。借助video.js这类播放器库,可以接管m3u8解析、分片拉取与拼接,实现跨浏览器直播流播放。本文从协议原理出发,分析浏览器兼容矩阵,讲解在Vue项目中封装可复用video.js组件的思路,包括动态src切换、自动播放静音策略、错误码解读及直播延迟优化等实践细节。无

weixin_34246826的博客 290

JavaScript_00001_00000

JavaScript

wisdom 480

告别复杂配置!用GuidosToolbox 3.0做MSPA景观格局分析,从安装到出图全记录

本文详细介绍了如何使用GuidosToolbox 3.0进行MSPA景观格局分析,从安装配置到出图全流程。涵盖环境准备、数据预处理、参数设置、结果解读及可视化技巧,帮助用户快速掌握这一生态安全评估工具。特别针对安装教程中的常见问题提供解决方案,提升分析效率。

weixin_29248313的博客 489

JavaScript处理Unicode的‘\u0000‘截断字符串问题

JavaScript处理Unicode的’\u0000’ 开发中遇到这样一个问题,前台调用后台数据。返回的id值是Unicode编码的。JS 在识别的时候会自动变成‘ 0 1’,如何去除空字符使之变成不被截断的字符串?解决方法如下: //返回的数据 let str = '\u00000\u00001' console.log(str) //' 0 1' //我们的预期 得到连续的字符串 ‘01’ //使用正则对空字符进行处理 str = str.replace(/[^0-9]/ig,"") cons

typhoonpython的博客 5238

手把手教会你用yolov8从环境配置到检测任务实战

做本文章前,我浏览过很多网上资料,我发现他们总是写的含糊不清,而且实际操作起来就会有各种各样的问题,要么就是根本不适合一些小白,所以我在这里写一篇完全针对小白的yolo从入门到实战。看完本文章后大家都可以实现下图效果,数字识别是一种比较简单的检测任务,其他识别任务学完本例也能够一通百通,大家边做边学,更好的体会yolo的神奇之处。

KevenDuan的博客 2871

5.1 滑模控制(SMC)及其改进

本文系统阐述了滑模控制(SMC)的基本原理及其在永磁同步电机(PMSM)控制系统中的应用。首先介绍了滑模控制的核心思想,包括滑模面设计和不连续控制律,其强鲁棒性使其在电机控制领域得到广泛应用。其次分析了SMC在PMSM速度控制器和无位置传感器观测器中的具体实现方案。重点探讨了SMC固有的抖振问题,详细比较了边界层法、高阶滑模和自适应方法等多种改进策略的优缺点。最后指出改进SMC的研究趋势是多种策略的融合应用,如自适应高阶滑模等,以在保持鲁棒性的同时有效抑制抖振。

技术工作者 1448

Vue_00001

Vue

wisdom 424

【编号326】全国地灾数据全国25万多个地质灾害点空间分布数据

全国地质灾害点分布数据涵盖25万多个各类灾害点信息,为灾害防治提供重要依据。通过分析灾害分布规律,可识别高风险区,指导监测预警、应急避险和基础设施建设。多地成功案例(如湖北兴山崩塌避险、重庆长寿滑坡预警、湖南"挪床行动")证明,提前预警和科学防治能有效避免人员伤亡。云南省2024年通过预警体系成功避让31起灾害,保护1342人生命安全。这些实践表明,地质灾害防治需结合科技手段与群防体系,实现早预警、早处置。

千奇百怪无奇不有 1472

前端JS如何实现数字前面补充000000,及后端如何实现数字前面加000000

前端JS的实现方式: 赋值下面这串代码调用即可: function getNum(num, n) { var value = Array(n).join(0) + num; return value.slice(-n); } 结果如下: 后台Java实现方式: 复制下面代码即可测试: DecimalFormat df=new DecimalF...

weixin_43992507的博客 1284

利用Openlayers4实现地图遮罩效果(二)

之前实现的遮罩效果,在深色背景的底图上,对要突出的区域采用半透明遮罩,以此来突出该区域。但是有时底图颜色偏白,这时候不再适合对要突出的区域采用遮罩,而是要对突出区域之外进行遮罩处理。两种效果的对比入下图: ...

此爱如少年 6398

Simulink Test Sequence自动化测试实战:从Excel到模型验证

本文详细介绍了如何利用Excel和MATLAB脚本实现Simulink Test Sequence的自动化测试。通过设计结构化Excel模板管理测试数据,并调用Simulink Test API批量创建与执行测试用例,该方法能显著提升复杂模型单元测试的效率,便于集成到CI/CD流程,实现从数据到验证的全自动化。

weixin_29261711的博客 144

javascript webstorm用法

javascript webstorm用法 一.什么是webstorm? WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS...

dazhexuan0219的博客 220

ubuntu18.04安装Nvidia显卡驱动后黑屏及网络、蓝牙驱动消失的解决方案

ubuntu18.04安装Nvidia显卡驱动后黑屏及网络、蓝牙驱动消失的解决方案

weixin_40735291的博客 6618

ffmpeg + video.js(mp4转.m3u8)视频播放

ffmpeg + video.js(mp4转.m3u8)视频播放 **问:**为什么要使用这种方案呢?前端直接使用h5的video标签来播放mp4的视频资源不行吗? **答:**直接使用h5的video标签固然可以,而且方便,直接将视频的地址插入到video标签的src里面即可。 **But:**仅仅是播放本地的资源还好,但是如果把资源放在服务器上,就会慢好多。 **方案:**就是将mp4切割为多个片段,然后一段一段的去加载,相比于一次性去加载,这种切片的形式会好很多。许多在线的视频播放器也是采用的这种方案

qq_43592800的博客 5580

【华为OD机试真题】4、字符统计及重排 | 机试真题+思路参考+代码解析(C++、Java、Py)

题目描述 >给出一个仅包含字母的字符串,不包含空格,统计字符串中各个字母(区分大小写)出现的次数, 并按照字母出现次数从大到小的顺序。输出各个字母及其出现次数。 如果次数相同,按照自然顺序进行排序,且小写字母在大写字母之前

KJ.JK 3289

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

处理 JavaScript 复杂对象:深拷贝、Immutable & Immer

我们知道 js 对象是按共享传递(call by sharing)的,因此在处理复杂 js 对象的时候,往往会因为修改了对象而产生副作用———因为不知道谁还引用着这份数据,不知道这些修改会影响到谁。因此我们经常会把对象做一次拷贝再放到处理函数中。最常见的拷贝是利用 Object.assign() 新建一个副本或者利用 ES6 的 对象解构运算,但它们仅仅只是浅拷贝。 深拷贝 如果需要深拷贝,拷贝的...

weixin_33965305的博客 913

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Javascript Ext.data.JSonReader

Ext.data.JsonReader读取json数据 一、不传URL view plaincopy to clipboardprint? var myData={ "Head":[     { "UserName":"admin","Name":"李亚斌","Gender":"M","Password":"123456","Status":"0","Department":"技术部","

330

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

30分钟上手教程:用three.js + 3d-collection搭建网页版3D资产画廊

**3d-collection**(Scenario 3D Collection)是一个精选的 AI 生成 3D 模型数据集,收录了 **1,342 个高质量 3D 示例**,其中 **1,271 个 GLB 文件** 可直接被 [three.js](https://threejs.org) 生态中的 `GLTFLoader` 加载,另外还有 Blender、FBX、PLY、SPZ、VOX 等格式

gitblog_00072的博客 134

js中将 整数转成字符,,将unicode 编码后的字符还原出来的方法。

  一、将整数转成字符: String.fromCharCode(17496&gt;&gt;8,17496&amp;0xFF,19504&gt;&gt;8,19504&amp;0xFF,12848&gt;&gt;8,12848&amp;0xFF,13360&gt;&gt;8,13360&amp;0xFF,17969&gt;&gt;8,17969&amp;0xFF,12592&g

weixin_34068198的博客 425

Node.js在推荐系统中的服务层定位与工程实践

推荐系统本质上是数据驱动的闭环服务,其核心在于将离线计算结果转化为可访问、可反馈、可监控的在线能力。理解RESTful API设计原理、分层架构边界(计算层/存储层/服务层)与异步I/O模型,是构建高可用推荐服务的技术基础。Node.js凭借轻量启动、事件驱动和JSON原生友好等特性,在承担HTTP网关、缓存编排与数据增强等职责时展现出独特价值。本文围绕电影推荐场景,详解从Spark输出到Express接口、从前端渲染到Docker部署的全链路工程细节,涵盖MySQL/Redis双写、参数化查询、多级缓存穿

weixin_34267123的博客 425

Web 版翻译者资料库

本项目是桌面版《翻译者资料库》的 Web 移植版,基于 Spring Boot 3.3、Thymeleaf、Bootstrap 5.3 与 MySQL 8.0 构建。它面向翻译写作提供资料、词汇、句库、文本工具、对照制作、查找、备份恢复及旧库迁移等功能,完整继承桌面版核心业务规则,支持一键启动与离线访问。

howard2005的专栏 140
上一篇: 计算机基础_00000
下一篇: C#_00000
wisdom4
博客等级 码龄6年 307粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值