做Web UI最全的鼠标键盘事件!

深入解析Web自动化中鼠标与键盘事件:从基础API到高级动作链实战 在Web自动化测试领域,事件驱动模型是模拟用户交互的核心机制。其原理在于浏览器通过监听和响应鼠标与键盘等输入设备事件,来实现页面元素的动态交互。掌握事件模拟技术对于构建健壮、可靠的自动化脚本具有重要价值,尤其在测试复杂Web应用、富文本编辑器及需要精确用户操作模拟的场景中至关重要。本文聚焦于鼠标右击、拖拽、组合快捷键等高级交互的实战模拟,并关联WPF鼠标事件与VLC播放器交互等跨平台事件处理思想,通过剖析Selenium ActionChains与Playwright底层API,提供从事件监听到精准模拟的完 阅读详情

在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为。比如使用鼠标单击、双击、右击、拖拽等动作;或者键盘输入、快捷键使用、组合键使用等模拟键盘的操作。在 WebDeriver 中,有一个专门的类来负责实现这些测试场景,那就是ActionChains类,在使用该类做键盘操作的过程中会配合使用到 Keys 数据存储类,Keys包含键盘上所有特殊按键。

一、鼠标点击操作

click(element=None)左击context_click(element=None)右击
double_click(element=None)双击
move_to_element(element)移动鼠标到元素中间(悬停)
drag_and_drop(source,target)source上按下左键拖动到target元素上
click_and_hold(element=None)在元素上按下鼠标左键
release()释放鼠标
perform()执行ActionChains中存储的动作

element有None默认值的表示不传入参数该动作在原地执行。

鼠标事件具体使用示例如下:
示例1:鼠标左键点击

action=ActionChains(driver)action.click() # 在鼠标当前位置单击
action.perform() # 执行action存储的动作
action.click(driver.find_element_by_link_text('新闻')).perform()#鼠标在 '新闻' 元素位置单击
#注意:action.click() 动作并未执行,它只是存储在action实例中,需要通过action.perform()方法执行存
#储动作;鼠标键盘事件动作动作可以存储多个,然后一次性执行。如下执行Cytl+C:
ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()

示例2:鼠标右击

action=ActionChains(driver)action.context_click().perform()
 # 在鼠标当前位置右击
action.context_click(driver.find_element_by_link_text('新闻')).perform()
# 鼠标在 '新闻' 元素位置右击

示例3:鼠标双击操作

action=ActionChains(driver)action.double_click().perform()
 # 在鼠标当前位置双击
action.double_click(driver.find_element_by_link_text('新闻')).perform()
# 鼠标在 '新闻' 元素位置双击击

示例4:鼠标移动

# 鼠标移动到 '新闻' 元素上的中心点
action.move_to_element(element).perform()
# 鼠标在原位置向x轴移动xoffset、y轴移动yoffset;xoffset、yoffset可为正负数
action.move_by_offset(-200,100).perform()
# 鼠标移动到element元素中心点偏移xoffset、yoffset
action.move_to_element_with_offset(element,-500,600).perform()
action.move_by_offset(xoffset,yoffset) 
#这里需要注意,如果 xoffset 为负数,表示横坐标向左移动,yoffset 为负数表示纵坐标向上移动。而且如果#这两个值大于当前屏幕的大小,鼠标只能移到屏幕最边界的位置。

鼠标移动操作在测试环境中比较常用到的场景是需要获取某元素的 flyover/tips,实际应用中很多 flyover 只有当鼠标移动到这个元素之后才出现,所以这个时候通过执行 move_to_element(to_element) 操作,就能达到预期的效果。根据我个人的经验,这个方法对于某些特定产品的图标的 flyover/tips 也不起作用,虽然在手动操作的时移动鼠标到这些图标上面可出现 flyover,但当使用 WebDriver 来模拟这一操作时,虽然方法成功执行,但 flyover 却不出来。所以在实际应用中,还需要对具体的产品页面做相应的处理。

######示例5:鼠标悬停
```action.click_and_hold().perform()
 # 鼠标在当前位置按下并不释放
action.click_and_hold(driver.find_element_by_link_text('设置')).perform()
# 鼠标 在'设置' 上悬停
action.click_and_hold(element) 这个方法实际上是执行了两个动作,首先是鼠标移动到元素 
element,然后再 click_and_hold, 所以这个方法也可以写成 :
action.move_to_element(element).click_and_hold()

示例6:鼠标拖拽

target = driver.find_element_by_id("sk") # 获取目标元素
# 将元素source拖动到target的位置
ActionChains(driver).drag_and_drop(source, target).perform()
# 鼠标拖拽动作,将 source 元素向x、y轴方向移动 (xoffset, yoffset) ,其中xoffset 为横坐标,yoffset 为纵坐标。
ActionChains(driver).drag_and_drop_by_offset(source, -100,100).perform()

在这个拖拽的过程中,已经使用到了鼠标的组合动作,首先是鼠标点击并按住 lick_and_hold( source) 元素,然后执行鼠标移动动作 (move_to),移动到 target 元素位置或者是 (xoffset, yoffset) 位置,再执行鼠标的释放动作 (release)。所以上面的方法也可以拆分成以下的几个执行动作来完成:

ActionChains(driver).click_and_hold(source).move_to_element(target).release().perform()

示例7:鼠标释放操

action = ActionChains(driver)action.release().perform() # 释放按下的鼠标

二、键盘操作

对于键盘的模拟操作,ActionChains类中有提供了按下key_down(keys)、释放key_up(keys)、按下并释放send_keys(keys_to_send) 等方法。键盘的操作有普通键盘和修饰键盘两种 。普通键盘为常用字母数字等;修饰键盘为Ctrl、Shift、Alt等,修饰键盘一般和其他键组合使用的键。使用键盘操作时需要引入from selenium.webdriver.common.keys import Keys包,Keys 包中含所有特殊用键。

1、普通键盘操作

键盘操作使用send_keys(*keys_to_send)方法,该方法支持多个按键连续操作,如果需要对某个元素执行按键操作使用send_keys_to_element( element, *keys_to_send)方法。具体使用如下示例:

from selenium.webdriver.common.keys import Keys
action = ActionChains(driver)action.send_keys(Keys.SPACE).perform() 
# 按下并释放空格键
action.send_keys(Keys.TAB).perform()
 # 按下并释放Tab键
action.send_keys(Keys.BACKSPACE).perform() 
# 按下并释放Backspace键
action.send_keys(Keys.BACKSPACE,Keys.SPACE).perform() 
# 连续执行按键动作action.send_keys(Keys.TAB).send_keys(Keys.TAB).perform() 
# 也可以这样组合'''针对某个元素发出某个键盘的按键操作,或者是输入操作'''
element = driver.find_element_by_id('query')
# 对一元素使用键盘操作
action.send_keys_to_element(element, 'selenium').perform()
# 上面动作拆解为下面动作
action.click(element).send_keys('selenium').perform()

注意:
除了 ActionChains类有 send_keys(keys_to_send)方法外,WebElement 类也有一个 send_keys_to_element(keys_to_send)方法,这两个方法对于一般的输入操作基本上相同,不同点在于以下几点:
第一点:Actions 中的 send_keys(*keys_to_send)对修饰键操作后并不会释放,也就是说当调用 actions.send_keys(Keys.ALT)、 actions.send_keys(Keys.CONTROL)、action.send_keys(Keys.SHIFT) 的时候,相当于调用 actions.key_down(keys_to_send),而如果在现实的应用中想要模拟按下并且释放这些修饰键,应该先action.reset_actions()重设action,然后再调用 action.send_keys(keys.NULL).perform()取消按下的修饰键。
第二点,在 WebDriver中,我们可以使用 WebElement 类的 send_keys() 来上传附件,比如 element.send_keys(“D:\test\uploadfile\test.jpg”)上文件,但不能使用ActionChains来上传附件,因为type=’file’的输入框并不支持键盘输入。

2、修饰键的使用

修饰键是键盘上的一个或者一组特别的键,当它与一般按键同时使用时,用来临时改变一般键盘的普通行为。

修饰键一般跟普通键组合使用,比如 Ctrl+A、Alt+F4等。

我们电脑中的修饰键一般有以下几种修:Ctrl、Alt(Option)、Shift、AltGr、Windows logo、Command、FN(Function)。一般使用的都是前三种。

对于修饰键的使用在Python selenium中一般使用按下key_down(keys)、释放key_up(keys)、按下并释放send_keys(keys_to_send)组合实现。

action = ActionChains(driver)action.key_down(Keys.CONTROL).perform()
 # 按下ctrl键
action.key_up(Keys.CONTROL).perform() 
# 释放ctrl键
action.key_down(Keys.SHIFT).perform()
 # 按下shift键
action.key_up(Keys.SHIFT).perform()
 # 释放shift键
action.key_down(Keys.ALT).perform()
 # 按下alt键
action.key_up(Keys.ALT).perform()
 # 释放alt键

示例:通过ctrl+c 来复制文本

ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()

三、WebElement.send_keys()键盘操作

WebElement元素对象下的send_keys也支持组合键盘操作。

代码示例如下:

element = 
driver.find_element_by_id('query')element.send_keys('selenium')element.send_keys(Keys.BACK_SPACE)
 # 按BACKSPACE删除一个字符
element.send_keys(Keys.SPACE) 
# 空格键(Space)
element.send_keys(Keys.CONTROL, 'a') 
# 全选(Ctrl+A)
element.send_keys(Keys.CONTROL, 'c') 
# 复制(Ctrl+C)
element.send_keys(Keys.CONTROL, 'v')
 # 粘贴(Ctrl+v)
element.send_keys(Keys.TAB)
# 制表键(Tab)
element.send_keys(Keys.ESCAPE) 
# 回退键(Esc)
element.send_keys(Keys.ENTER) 
# 回车键(Enter)

对测试技术感兴趣的同学,欢迎加QQ群175317069,一起学习,相互讨论。

群内已经有小伙伴将知识体系整理好(源码,笔记,PPT,学习视频),欢迎加群免费领取

加QQ群175317069,免费领取资料

Selenium ActionChains实战:掌握鼠标键盘事件,实现复杂UI自动化测试 UI自动化测试的核心在于模拟真实用户操作,而鼠标和键盘事件是实现这一目标的关键技术。其原理是通过WebDriver协议将操作序列化为底层输入指令,驱动浏览器执行。这项技术的价值在于能够处理点击、输入之外的复杂交互场景,如拖拽排序、右键菜单、快捷键操作等,从而提升测试覆盖率和可靠性。在Web应用、后台管理系统及SaaS平台的测试中,模拟连续的用户操作流是必不可少的。本文聚焦于Selenium的ActionChains工具,详细解析如何通过动作队列构建并执行鼠标悬停、拖拽、组合键等高级交互,并融入**右键点击* 阅读详情

相关推荐

论Web UI自动化测试的不稳定性(一)

Web UI自动化测试的不稳定性有两个层面: 技术层面–没有构造健壮的能稳定运行的脚本 非技术层面–项目原因或者用Web UI自动化企图达到不合适的目标,造成脚本频繁改动,维护成本高 今天先说第一点。首先,Web UI自动化测试是不稳定的,哪怕脚本写的很棒!为什么?因为Web应用本身就有不稳定的情况存在。以下这些情况想必我们都经历过: 点击网页上的按钮或者菜单没有响应(有时候第二次点击才有响应…)

sophie2805的专栏 6991

Web基础 ( 九 ) 事件

事件是指在 Web 页面中发生的操作或状态,比如用户点击、悬停、滚动、输入等。通过事件,我们可以对用户的操作作出相应的反应,比如更新页面内容、改变元素样式、提交表单数据等。就是用来识别用户操作并触发处理函数.

yuanchun的知识整理 2631

Python UI自动化测试与Web UI自动化测试框架详解

传统的商业模式以业务驱动产品,而现在则以技术驱动产品。特别是在产品迭代速度快,市场不断变化的当下,产品调整,很多时候是基于客户的需求,基于整个产品战略的调整。单纯的手工测试越来越无法适应这个变化的过程。测试人员怎样做到快速响应并且保证产品在上线后质量能够满足市场的要求?怎样通过测试技术的手段来达到测试效率的提升?这些值得我们思考。测试工作的意义,主要包括两个方面,一是产品质量的管理,二是测试效率的提升。自动化测试技术的应用越来越普遍,这源于企业的要求和互联网技术的发展。

悦分享 1274

Web-api学习 02:常见的鼠标事件

案例代码 onclick点击事件 <body> <div>123</div> <script> // 执行事件步骤 // 点击div 控制台输出 我被选中了 // 1. 获取事件源 var div = document.querySelector('div'); // 2.绑定事件 注册事件 // div.onclick ..

玉安_ZhangDe的博客 441

手把手教你打造CTF动态靶场

公司想搞一个CTF比赛,需要一个竞赛靶场,于是这个任务就落在了我的身上,平台是利用CTFd框架,基于docker搭建的动态靶场,搭建过程中遇到的坑比较多,这里我会把每一个遇到的坑都指出来。我搭建的是CTFd的3.X的版本。第一次搭建的话,搭建的过程会有些痛苦,但是搭建完成后会越来越熟练,这个平台的可用性还是很高的。由于搭建的过程中遇到的坑太多了,各种各样的问题,所以决定写下这篇文章,把所有的坑都指出来,也算为后边想搭这个平台的小伙伴指一条路。Taps:资源来源:星海安全实验室如果你也对网络安全&黑客。

Python栈 4935

无人机通信安全渗透测试:从信号拦截到GPS欺骗的完整攻防框架

在物联网和智能设备普及的背景下,无线通信安全成为关键基础设施防护的核心环节。其原理在于,通过软件定义无线电等设备对空中的射频信号进行捕获、分析与模拟,从而评估通信协议在加密、认证和防重放等方面的脆弱性。这项技术的价值在于,它能主动发现并修复系统设计缺陷,避免因信号被拦截或欺骗导致设备被劫持、数据泄露等重大安全事件。其应用场景广泛,涵盖消费电子、工业控制及关键基础设施等领域。本文聚焦于无人机这一典型移动物联网终端,深入探讨如何构建一套针对其通信链路的渗透测试方法论,其中涉及信号拦截、协议逆向等关键技术,旨在为

weixin_34128237的博客 392

Web(五、六)

DOM和BOM

m0_74778189的博客 1754

MWORKS 2025a电气模型库实战:手把手教你搭建全桥LLC电路(附避坑指南)

本文详细介绍了如何使用MWORKS 2025a电气模型库搭建全桥LLC电路,包括环境准备、电路拓扑构建、参数优化及故障诊断。通过实战案例和避坑指南,帮助电源工程师高效设计谐振转换器,提升转换效率至98%以上。文章特别强调了Modelica模型库在电气系统建模中的关键作用。

s8t9u0v1w的博客 604

【Web】0基础学Web—鼠标事件、键盘事件、表单事件、元素距离、元素位置

/ 通过js设置的样式为行内样式,.style也只能获取行内样式。//clientWidth=内容宽度+padding宽高。如果祖先元素有定位,相对最近的定位的祖先元素的偏移量。//获取元素距离父元素的顶部的高度,不受滚动条影响。//offsetWidth=整个控件的宽度。如果祖先元素没有定位,相对于浏览器的偏移量。//可以通过js提供的先关距离属性获取。//获取元素的滚动距离。

2201_75539182的博客 674

LabVIEW机器视觉通用软件

LabVIEW 通用视觉一款仿C模式的思想与方法 全网最精简零基础+通用视觉全套视频教程 只想把LabVIEW当作一种兴趣,结果却当成了职业 http://t.elecfans.com/c1181.html 本次(开源 )针对有一定视觉基础或项目开发经验的工程师量身打造视觉通用性系统(完全仿面向对象的原理),相对于一般的非标框架更具功能性,有效的解决复杂项目开发过程中的思路瓶颈。 LabVIEW通用视觉系统:通用软件可快速解决大部分简单的视觉开发项目,帮助众多软件工程师解决在非标视觉软件开发中的繁琐过程问

qq_21516871的博客 4610

Innovus 安装全过程

【代码】Innovus 安装全过程。

lmyynlbcy的博客 5543

web前端鼠标事件简介

需要注意的是,某些事件(如`mouseover`和`mouseout`)会在鼠标穿过元素及其子元素时频繁触发,而`mouseenter`和`mouseleave`则只在进入或离开元素本身时触发,不会因为穿过子元素而触发。8. `mouseenter`:当鼠标指针进入元素时触发,但不包括其任何子元素。9. `mouseleave`:当鼠标指针离开元素时触发,但不包括其任何子元素。6. `mouseover`:当鼠标指针进入元素时触发。7. `mouseout`:当鼠标指针离开元素时触发。

2302_80106738的博客 1113

向量乘法器设计

同样基于Wallace树乘法器,我们来构造向量乘法器。 在一些矩阵运算中经常用到向量的相乘运算,本例以4维向量为例子介绍向量乘法器的verilog HDL设计。 设向量a = (a1, a2, a3, a4), b = (b1, b2, b3, b4)。 则a 与 b的点乘为:a * b = a1 b1 + a2 b2 + a3 b3 + a4 b4, 即向量对应位置的值相乘,再相加...

Reborn Lee 2969

selenium web UI自动化 -- select、鼠标、键盘、等待方式、网页嵌套及实例

select、鼠标、键盘、等待方式、网页嵌套及实例

zr966458的博客 2705

【YOLOv12多模态融合改进】(可见光+红外)涉及像素级融合、特征级融合(中期、中后期、后期)、决策级融合的完整配置步骤以及二次改进方案

在网络输入阶段将多模态数据直接合并,形成统一的特征表示。

Limiiiing的博客 1212

基于STM32的智能电子秤设计毕业论文

摘要:本文设计了一款基于STM32F103C8T6的智能电子秤系统,通过HX711称重传感器实现高精度测量,采用OLED显示和矩阵键盘完成人机交互。系统包含重量采集、数据处理、单价设置、去皮清零及总价计算等功能模块,经测试测量误差小于0.1%,稳定性良好。研究实现了低成本、高可靠性的智能称重方案,为后续无线传输和AI算法集成奠定了基础。关键词:STM32;智能电子秤;HX711;OLED显示;矩阵键盘。

3254968421的博客 849

WEB UI自动化之鼠标事件和键盘事件

鼠标事件是指对某个元素进行鼠标操作,在进行鼠标操作之前需要先定位到该元素。5、拖动元素,将ele1拖到ele2。3、输入一个空格,再输入内容。2、删除最后一个多余的n。4、全选输入框的内容。6、粘贴剪切板的内容。

weixin_40233170的博客 404

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

html 鼠标中键事件,Javascript事件模拟(鼠标事件、键盘事件)

在javascript编程中,事件是用来描述网页中某一特定有趣时刻的,众所周知事件通常是在由用户和浏览器进行交互时触发,其实不然,通过Javascript可以在任何时间触发特定的事件,并且这些事件与浏览器创建的事件是相同的。会有适当的事件冒泡,并且浏览器会执行分配的事件处理程序。这种能力在测试web应用程序的时候,是非常有用的,在DOM 3级规范中提供了方法来模拟特定的事件,IE9 chrome ...

weixin_36330888的博客 1080

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Selenium Actions类操作:鼠标悬停、拖放、键盘事件模拟

本文介绍了Selenium中Actions类的核心概念与应用场景,重点讲解了鼠标悬停(Hover)和拖放(Drag and Drop)两大高级交互操作的技术实现。 内容摘要: 对比了基本操作与Actions类的关键差异,突出Actions类在模拟复杂用户交互方面的优势 详细解析了鼠标悬停操作,包括基础实现、悬停后点击子菜单和多级导航菜单等进阶用法 深入讲解了拖放操作的实现,涵盖基础拖放、精确坐标控制以及列表排序等典型场景 提供了完整的Python代码示例,展示如何构建操作链并执行复杂交互 强调了在实际测试中

YAnt的博客 1872

假人有限元模型

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

Javascript事件模拟(鼠标事件、键盘事件)

本文介绍了javascript实现事件模拟的方法与实例代码,有关javascript键盘事件、javascript鼠标事件等的用法,感兴趣的朋友参考下 在javascript编程中,事件是用来描述网页中某一特定有趣时刻的,众所周知事件通常是在由用户和浏览器进行交互时触发,其实不然,通过Javascript可以在任何时间触发特定的事件,并且这些事件与浏览器创建的事件是相同的。 会有适当的

gold0523的专栏 1万+

Puppeteer鼠标键盘事件处理:从基础操作到复杂交互的完整指南

Puppeteer-examples项目提供了丰富的Puppeteer鼠标键盘事件处理示例,帮助开发者掌握自动化浏览器交互的核心技能。**Puppeteer鼠标键盘事件处理**是实现网页自动化测试和数据抓取的关键技术,通过精准模拟用户操作,可以完成从简单的点击输入到复杂的拖拽交互等任务。 ## 为什么Puppeteer鼠标键盘事件处理如此重要? 在现代Web开发中,**自动化浏览器交互**已成

gitblog_00129的博客 646

selenium模拟鼠标键盘事件

本文介绍了使用Selenium模拟键盘和鼠标操作的方法。键盘操作部分展示了如何通过send_keys()方法实现文本输入、组合键操作(如Ctrl+A全选、Ctrl+C复制等)以及特殊按键(如回车、退格键等)的模拟。鼠标操作部分使用ActionChains类,演示了鼠标移动、点击、拖放等动作的链式调用,并通过perform()方法执行操作队列。文中提供了百度搜索框的键盘输入案例和一个元素点击的鼠标操作示例,同时列出了常用的键盘和鼠标操作方法,包括单击、双击、右键点击、拖拽等交互行为的实现方式。

St_rive的博客 316

web自动化测试终篇(28):总结我理解的ui自动化

①需求稳定,不会频繁变更 自动化测试最大的挑战就是需求的变化,而自动化脚本本身就需要修改、扩展、debug,去适应新的功能,如果投入产出比太低,那么自动化测试也失去了其价值和意义; 折中的做法是选择相对稳定的模块和功能进行自动化测试,变动较大、需求变更较频繁的部分用手工测试; ②多平台运行,组合遍历型、大量的重复任务 测试数据、测试用例、自动化脚本的重用性和移植性较强,降低成本,提高效率和价值; ...

许西城的博客 9815

Compose Multiplatform Web平台键盘事件处理机制解析

Compose Multiplatform作为JetBrains推出的跨平台UI框架,在Web平台(Wasm)上的键盘事件处理机制与桌面平台存在一些差异,这给开发者带来了一定困扰。本文将深入分析这一问题的技术背景和解决方案。 ## 键盘事件处理机制差异 在桌面平台,开发者可以直接在Window函数中通过onKeyEvent参数监听全局键盘事件: ```kotlin Window( o...

gitblog_00416的博客 410

python+selenium做ui自动化测试用法必会

目录:导读 一、前言 二、环境安装 三、牛刀小试 1. 控制浏览器 2. 对象的定位 3. 操作测试对象 4. 鼠标键盘事件 5. 等待时间 6. 组对象定位及层级定位,呃,忽略 7. 多窗口处理 8. 提示窗口处理 9. 控制浏览器滚动条,这个运用之前提示的jq语句即可实现 10. cookie处理,主要用途在于处理验证码问题 四、小结 一、前言 大家都知道,基于Web端的测试的基础框架是需要Selenium做主要支撑的,这里边给大家介绍下Web测试核心之基于 Python

测试逍遥子的博客 4093

QML Web事件处理与用户界面设计

QML_Web事件模型概述QML Web事件模型概述在《QML Web事件处理与用户界面设计》这本书中,我们将深入探讨QML中Web事件的处理方式,以及如何利用这些事件来设计出色的用户界面。本章将为您介绍QML Web事件模型的基础知识。Web事件的类型Web事件是用户与Web页面交互时产生的事件,如点击、滑动、键盘输入等。在QML中,我们可以利用这些Web事件来响应用户的操作,从而实现各种交互功能。常见的Web事件类型包括,

QT性能优化QT原理源码QT界面美化 923
上一篇: 基于websocket协议的压力测试
下一篇: 软件测试经典面试题(1)
TestingGDR
博客等级 码龄8年 496粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值