【小白学爬虫连载(6)】--Selenium库详解

【爬虫】手把手教你写网络爬虫(1) 从零开始写爬虫,初学者的速成指南! 阅读详情

欢迎大家关注公众号【哈希大数据】

【小白学爬虫连载(1)】-爬虫框架简介

【小白学爬虫连载(2)】--Requests库介绍

【小白学爬虫连载(3)】--正则表达式详细介绍

【小白学爬虫连载(4)】-如何使用chrome分析目标网站

【小白学爬虫连载(5)】--Beautiful Soup库详解

【小白学爬虫连载(6)】--Selenium库详解

【小白学爬虫连载(7)】--scrapy框架的安装

【小白学爬虫连载(8)】--scrapy框架入门教程

【小白学爬虫连载(9)】--scrapy构架设计分析

【小白学爬虫连载(10)】--如何用Python实现模拟登陆网站

【小白学爬虫连载(11)】--获取免费高匿代理IP

【小白学爬虫连载(11)】--pyquery库详解

【小白学爬虫连载(13)】--Scrapy如何突破反爬虫

Selenium库是Python的自动化测试工具 ,它支持多种浏览器包括Chrome、Mozilla Firefox、PhantomJS等。在爬虫中主要解决因为利用JavaScript渲染操作不能利用Requests库获取网页内容的问题。利用JavaScript渲染的网站有很多典型的如淘宝、今日头条、一点资讯、快递100等。 Selenium安装与测试

对于Windows平台:首先介绍一种简单的安装包的方法,打开cmd,执行pip install selenium。如果第一种方法出现如timeout等问题,我们还可以采用手动方法安装,步骤如下:

  • 登陆该网站(https://www.lfd.uci.edu/~gohlke/pythonlibs/)下载你所需要的第三包的whl文件(用Ctrl+F命令搜索你想安装的第三方包),建议存储在Python安装目录中的\Lib\site-packages目录下。

  • 下载完成后打开命令行,输入pip install 文件绝对路径 ,然后点击回车就OK啦。

完成Selenium库的安装后,我们需要下载一些浏览器驱动器,这里建议大家使用Chrome浏览器,为此我们需要在电脑上下载一个chromedriver,下载chromedriver时需要注意的问题是与电脑上的chrome浏览器版本要对应。大家可以按下面这个连接中给定的映射关系进行下载:http://blog.youkuaiyun.com/huilan_same/article/details/51896672,感谢huilan_same的分享。chromedriver的下载地址:http://npm.taobao.org/mirrors/chromedriver/

下载的chromedriver需要配置进path环境变量,也可以用我下面的语句加入executable_path参数,后面为 chromedriver的绝对路径,chromedriver_win32为存放chromedriver.exe的文件夹。下面对Selenium进行简单的测试:

from selenium import webdriver
browser = webdriver.Chrome(executable_path=r'E:\EXE\chromedriver_win32\chromedriver')# executable_path后面跟的是chromedriver的绝对路径
browser.get("http://www.baidu.com")
print(browser.page_source)
browser.close()
查找元素

1.查找单个元素

selenium查找元素的方法有很多:

find_element_by_name
find_element_by_id
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector

下面举一个例子:


from selenium import webdriver
browser = webdriver.Chrome(executable_path=r'E:\EXE\chromedriver_win32\chromedriver')# executable_path后面跟的是chromedriver的绝对路径
browser.get("http://www.taobao.com")
input_first = browser.find_element_by_id("q")
input_second = browser.find_element_by_css_selector("#q")
input_third = browser.find_element_by_xpath('//*[@id="q"]')
print(input_first)
print(input_second)
print(input_third)
browser.close()

例子中通过三种不同的方式去获取响应的元素,第一种是通过id的方式,第二个中是CSS选择器,第三种是xpath选择器,结果都是相同的

2.查找多个元素

查找多元素与查找单个元素的区别不大,在函数名上多加了一个s例如:find_elements_by_name。查找大哥元素返回的是符合查找条件的第一个标签,查找多个元素返回的是符合条件的所有标签。

3.获取元素属性

在查找到相应元素后可以利用get_attribute(属性名称)函数获取属性值

举一个简单的例子如下:


from selenium import webdriver
browser = webdriver.Chrome(executable_path=r'E:\EXE\chromedriver_win32\chromedriver')# executable_path后面跟的是chromedriver的绝对路径
browser.get('https://www.taobao.com/')
input_str = driver.find_element_by_id('q')
print(input_str.get_attribute('aria-label'))

得到的结果是:"请输入搜索文字"

4.获取文本值

与获取元素属性类似,不过更简单,直接在查找到元素后利用其text方法

5.获取标签位置及大小

与获取文本值一样,获取位置的方法为location,获取大小的方法为size


from selenium import webdriver
browser = webdriver.Chrome(executable_path=r'E:\EXE\chromedriver_win32\chromedriver')# executable_path后面跟的是chromedriver的绝对路径
browser.get('https://www.taobao.com/')
input_str = driver.find_element_by_id('q')
print(input_str.location)
print(input_str.size)

模拟操作

1.元素交互操作

元素交互操作是指咱们经常用到的如查询操作,登陆操作等

下面举一个查询操作的例子:


from selenium import webdriver
browser = webdriver.Chrome(executable_path=r'E:\EXE\chromedriver_win32\chromedriver')# executable_path后面跟的是chromedriver的绝对路径
browser.get('http://www.kuaidi100.com/')
# print('cookies:', driver.get_cookies())
browser.find_element_by_name("postid").clear() # 清空输入框内容
browser.find_element_by_name("postid").send_keys('3346535929281') # 输入订单号
browser.find_element_by_id("query").click() # 点击搜索按钮

该例是在快递100中查询一个订单的物流信息。

2.执行JavaScript操作

这是一个非常有用的方法,这里就可以直接调用js方法来实现一些操作,下面的例子是打开快递100通过js翻到页面底部


from selenium import webdriver
browser = webdriver.Chrome(executable_path=r'E:\EXE\chromedriver_win32\chromedriver')# executable_path后面跟的是chromedriver的绝对路径
browser.get('http://www.kuaidi100.com/')
browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')

切换Frame

frame标签是比较特殊的,定位该标签内部的元素时必须先切换到对应的frame内,通过下面的例子演示这里常用的是switch_to.frame()和switch_to.parent_frame():

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
browser = webdriver.Chrome()
browser.get('http://bj.96weixin.com/')
browser.switch_to.frame('ueditor_1')
source = browser.find_element_by_class_name('view')
print(source)
try:
logo = browser.find_element_by_xpath('//*[@id="main"]/div[1]/div/div/div[1]/a/h1/img')
except NoSuchElementException:
print('NO LOGO')
browser.switch_to.parent_frame()
logo = browser.find_element_by_xpath('//*[@id="main"]/div[1]/div/div/div[1]/a/h1/img')
print(logo)
print(logo.get_attribute('src'))

很多时候网页中要获取的内容显示其在一个框框里面,大家就要查看其是不是在各个框架内,避免出错。

等待

网页中很多内容是通过Ajax加载,需要一定时间才能加载出来,但selenium默认的是打开网页后变开始定位元素,这样容易出现找不到元素这样的问题,不过selenium提供了两种等待元素出现的方式:显示等待和隐式等待。

1.显示等待

指定一个等待条件,并且指定一个最长等待时间,会在这个时间内进行判断是否满足等待条件,如果成立就会立即返回,如果不成立,就会一直等待,直到等待你指定的最长等待时间,如果还是不满足,就会抛出异常,如果满足了就会正常返回。


from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
browser = webdriver.Chrome()
browser.get('https://www.taobao.com/')
wait = WebDriverWait(browser, 10)
input = wait.until(EC.presence_of_element_located((By.ID, 'q')))
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-search')))
print(input, button)

上述的例子中的条件:EC.presence_of_element_located()是确认元素是否已经出现了EC.element_to_be_clickable()是确认元素是否是可点击的

常用的判断条件:

title_is 标题是某内容
title_contains 标题包含某内容
presence_of_element_located 元素加载出,传入定位元组,如(By.ID, 'p')
visibility_of_element_located 元素可见,传入定位元组
visibility_of 可见,传入元素对象
presence_of_all_elements_located 所有元素加载出
text_to_be_present_in_element 某个元素文本包含某文字
text_to_be_present_in_element_value 某个元素值包含某文字
frame_to_be_available_and_switch_to_it frame加载并切换
invisibility_of_element_located 元素不可见
element_to_be_clickable 元素可点击
staleness_of 判断一个元素是否仍在DOM,可判断页面是否已经刷新
element_to_be_ 元素可选择,传元素对象
element_located_to_be_selected 元素可选择,传入定位元组
element_selection_state_to_be 传入元素对象以及状态,相等返回True,否则返回False
element_located_selection_state_to_be 传入定位元组以及状态,相等返回True,否则返回False
alert_is_present 是否出现Alert

2.隐式等待

到了一定的时间发现元素还没有加载,则继续等待我们指定的时间,如果超过了我们指定的时间还没有加载就会抛出异常,如果没有需要等待的时候就已经加载完毕就会立即执行。


from selenium import webdriver
browser = webdriver.Chrome()
browser.implicitly_wait(10)
browser.get('https://www.zhihu.com/explore')
input = browser.find_element_by_class_name('zu-top-add-question')
print(input)


选项卡管理

通过执行window.open()实现新开选项卡
通过browser.window_handles函数可以获得选项卡列表
通过browser.window_handles[n]就可以操作第n个选项卡

通过browser.close()关闭当前选项卡

from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.execute_script('window.open()')# 打开一个新的选项卡
print(browser.window_handles)
browser.switch_to_window(browser.window_handles[1])#切换到第二个选项卡,注意这里0为第一个
browser.get('https://www.taobao.com')
time.sleep(1)
browser.close()#关闭当前选项卡
browser.switch_to_window(browser.window_handles[0])
browser.get('https://python.org')

小结

本文介绍了selenium库的安装和测试方法,本文主要介绍selenium驱动chrome浏览器的相关操作,其他浏览器基本一样只是需要添加对应的浏览器驱动,后面主要介绍了如何查找元素、获取属性值、模拟人的操作、操作frame内的元素、等待、选项卡管理。更多的内容请到:

http://selenium-python.readthedocs.io/api.html


万字攻略全面了解selenium_selenium教程 一起学习下python爬虫4小分队(scrapy、beautifulsoup、selenium以及pyppeteer)之一的Selenium库,主要用于模拟浏览器运行,是一个用于web应用测试的工具。Selenium直接运行在浏览器中,看起来就像人在操作一样(也可无窗口模式运行)。支持的浏览器包括IE、Firefox、Safari、Chrome、Opera和Edge等。............ 阅读详情

相关推荐

【Python技术学习】- python selenium 库

不同的浏览器需要不同的 WebDriver,例如 Chrome 浏览器需要 ChromeDriver,你需要根据你使用的浏览器下载相应的 WebDriver,并确保它在你的系统 PATH 中。要开始使用 Selenium,首先需要安装 selenium 库,并下载适用于你浏览器的 WebDriver。下面是一个简单的 Selenium 项目示例,用于自动化搜索关键词,并获取结果页面的标题。# 或者使用 Firefox 浏览器。# 使用 Chrome 浏览器。# 或者使用 Edge 浏览器。

xiaoli8748的专栏 3869

基于Selenium爬取动态网页

文章目录一、Selenium介绍与配置二、启动浏览器并打开百度搜索三、爬取动态网页数据四、爬取京东网站书籍信息总结参考 一、Selenium介绍与配置 Selenium简介   Selenium 是ThoughtWorks专门为Web应用程序编写的一个验收测试工具。Selenium测试直接运行在浏览器中,可以模拟真实用户的行为。支持的浏览器包括IE(7、8、9)、Mozilla Firefox、Mozilla Suite等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好地

m0_59416558的博客 3319

利用Python暴力破解邻居家WiFi密码

如觉得博主文章写的不错或对你有所帮助的话,还望大家多多支持呀!

weixin_45841831的博客 6万+

Selenium库

selenium库是一个自动化测试工具,能够驱动浏览器模拟人的操作,如鼠标单击、键盘输入等。

malishizu222的博客 6087

AI+AB测试提升电商主图点击率实战指南

在电商运营中,主图点击率(CTR)是衡量商品吸引力的核心指标,直接影响转化率和订单增长。通过AI技术批量生成高质量主图素材,结合数据驱动的AB测试方法,可以显著提升点击率。AI工具如MidJourney和Stable Diffusion能够快速生成多样化视觉方案,而自动化处理流水线则确保素材规格统一。AB测试体系通过多维变量控制和流量分配策略,科学验证不同素材效果。这种方法特别适用于需要快速迭代的电商场景,某女装店铺案例显示CTR从1.2%提升至3.8%,验证了AI+数据协同优化的技术价值。

weixin_29058331的博客 298

python DEA: 基于非径向距离NDDF的Malmquist-Luenberger 指数及其分解

点赞发Nature 关注中Science Malmquist-Lenberger指数(ML指数)是距离函数与DEA计算中常用的指数,ML指数可以进一步分解为技术进步technological progress和效率改善effeciency change. 技术进步常被当做增长模型中的全要素生产率,用到许多计量经济研究中,探讨影响技术进步的环境变量。这里我分享一个考虑非期望产出下的NDDF方法计算ML指数。 该ML指数为global ML(区别于sequential ML) import numpy as

Cmmmmm丶的博客 5297

Python-Selenium 库详解

Selenium 是 Python 生态中 ​。

wanglaqqqq的博客 3546

mcgs数据导出到U盘

mcgs触摸屏在工业中应用还是很多的,尤其他的脚本功能策略功能等将开放性放到了最大,让用户可以根据实际需求进行自由创作,正因为这样,对一些初学者就不是很友好,初学者想要简单操作就能实现功能,但是mcgs不可能两者兼备,在做工业设备,一些数据的采集保存就比较常见,但是mcgs没有相关按钮能够直接实现将数据导出到U盘的功能。这里我给大家讲解关于mcgs将报警历史记录、日志记录、历史数据记录导出到U盘的方法。

qq_24866535的博客 6234

python网络爬虫之初识网络爬虫

第一次接触到python是一个很偶然的因素,由于经常在网上看连载小说,很多小说都是上几百的连载。因此想到能不能自己做一个工具自动下载这些小说,然后copy到电脑或者手机上,这样在没有网络或者网络信号不好的时候都可以看。当时还不知道网络爬虫的概念。工作学习中用得最多的是C编程,但是对于网络世界而言,C确实不是一个好的语音,C更多面向硬件和内核。基于想自己下载网络小说的念头,认识到了pyth...

dianjie9145的博客 174

重构工业交互体验:响应式数据可视化大屏解决方案

从智慧园区到数据中心,从水务监控到风力发电场景,HT 通过 2D/3D 组态技术与响应式布局机制,让数据以更灵活、更精准的方式呈现场景动态 —— 这正是 HT 技术在工业可视化领域的核心价值。例如,在智慧楼宇监控系统中,HT 引擎可实时渲染建筑结构、设备状态与数据流,同时确保画面在不同尺寸屏幕上的一致性。以某工业数据中心大屏为例,HT 通过暗红色主调搭配工业元素,结合粉色与黄色点缀,打破传统深蓝色大屏的视觉定式,同时通过矢量图形确保色彩在不同亮度下的辨识度 —— 这正是 HT 技术在视觉设计上的独特优势。

Hightopo的博客 889

2018安徽省青少年信息学奥林匹克(AHOI)初中组

12 种合法的排列分别为:1, 3, 2, 4, 2, 3, 1, 4, 3, 1, 4, 2, 3, 2, 4, 1, 1, 3, 4, 2, 2, 3,4,1,1,4,2,3, 2,4,1,3, 4,1,3,2, 4,2,3,1, 1,4,3,2, 2,4,3,1。分为 2 组,一组的队员实力值是{4, 5, 2, 3},一组是{-4, -3, -5},其中最小的组人数为 3,可以发现没有比 3 更优的分法了。[0, 1, 1, 2]同样不是合法的分组方案,因为出现了两个实力值为 1 的选手。

weixin_42358969的博客 1143

【小白学爬虫连载(1)】-爬虫框架简介

欢迎大家关注公众号【哈希大数据】【小白学爬虫连载(1)】-爬虫框架简介【小白学爬虫连载(2)】--Requests库介绍【小白学爬虫连载(3)】--正则表达式详细介绍【小白学爬虫连载(4)】-如何使用chrome分析目标网站【小白学爬虫连载(5)】--Beautiful Soup库详解【小白学爬虫连载(6)】--Selenium库详解【小白学爬虫连载(7)】--scrapy框架的安装【小白学爬虫连...

HashData2018的博客 528

vue2学习笔记2-老规矩,从Hello World开始,了解Vue实例和模板

想要把“Hello,World”放置在页面上,首先需要准备一个HTML的块级元素div,来承接内容。

l_q_l的专栏 1258

手把手教你写网络爬虫(1):网易云音乐歌单

首页 所有文章 观点与动态 基础知识 系列教程 实践项目 工具与框架 工具资源 Python小组 - 导航条 -首页所有文章观点与动态基础知识系列教程实践项目工具与框架工具资源Python小组 伯乐在线>Python - 伯乐在线>所有文章>系列教程> 手把手教你写网络爬虫(1):网易云音乐歌单 手把手教你写网络爬虫(1):网易云音乐歌单 ...

qq_24624539的博客 578

TRAE智能体开发:TRAE概述

TRAE(/treɪ/)深度融合 AI 能力,是一名能够理解需求、调用工具并独立完成各类开发任务的“AI 开发工程师”,帮助你高效推进每一个项目。

王国平的博客 1268

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Python网络爬虫1:网易云音乐歌单

摘要:从零开始写爬虫,初学者的速成指南! 需要免费获取本文章讲解的视频+源码,关注+转发此文然后私信我回复“音乐”即可领取资料,也欢迎大家和我一起交流学习Python 封面: 大家好,《手把手教你写网络爬虫》连载开始了!在笔者的职业生涯中,几乎没有发现像网络爬虫这样的编程...

chupanzhuo4827的博客 215

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【小白学爬虫连载(7)】--scrapy框架的安装

欢迎大家关注公众号【哈希大数据】【小白学爬虫连载(1)】-爬虫框架简介【小白学爬虫连载(2)】--Requests库介绍【小白学爬虫连载(3)】--正则表达式详细介绍【小白学爬虫连载(4)】-如何使用chrome分析目标网站【小白学爬虫连载(5)】--Beautiful Soup库详解【小白学爬虫连载(6)】--Selenium库详解【小白学爬虫连载(7)】--scrapy框架的安装【小白学爬虫连...

HashData2018的博客 281

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

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

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

python网络爬虫网易云音乐_手把手教你写网络爬虫(1):网易云音乐歌单

大家好,《手把手教你写网络爬虫》连载开始了!在笔者的职业生涯中,几乎没有发现像网络爬虫这样的编程实践,可以同时吸引程序员和门外汉的注意。本文由浅入深的把爬虫技术和盘托出,为初学者提供一种轻松的入门方式。请跟随我们一起踏上爬虫学习的打怪升级之路吧!介绍什么是爬虫?先看看百度百科的定义:把这段代码保存为get_html.py,然后运行,看看输出了什么:定位到的html代码:有了这些信息,就可以用Bea...

weixin_33998219的博客 650

手把手教你使用Python网络爬虫获取B站视频选集内容(附源码)

点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤位卑未敢忘忧国,事定犹须待阖棺。大家好,我是Python进阶者。前...

pdcfighting的博客 2408

【小白学爬虫连载(2)】--Requests库介绍

欢迎大家关注公众号【哈希大数据】【小白学爬虫连载(1)】-爬虫框架简介【小白学爬虫连载(2)】--Requests库介绍【小白学爬虫连载(3)】--正则表达式详细介绍【小白学爬虫连载(4)】-如何使用chrome分析目标网站【小白学爬虫连载(5)】--Beautiful Soup库详解【小白学爬虫连载(6)】--Selenium库详解【小白学爬虫连载(7)】--scrapy框架的安装【小白学爬虫连...

HashData2018的博客 449

网易教程python_手把手教你写Python网络爬虫(1):网易云音乐歌单

摘要:从零开始写爬虫,初学者的速成指南!需要免费获取本文章讲解的视频+源码,关注+转发此文然后私信我回复“音乐”即可领取资料,也欢迎大家和我一起交流学习Python,共同成长封面:封面大家好,《手把手教你写网络爬虫》连载开始了!在笔者的职业生涯中,几乎没有发现像网络爬虫这样的编程实践,可以同时吸引程序员和门外汉的注意。本文由浅入深的把爬虫技术和盘托出,为初学者提供一种轻松的入门方式。请跟随我们一起...

weixin_39550379的博客 401

Python爬虫速成之路(6):Selenium的使用

爬虫就三大种实现方式。第一种是获取网页源代码来获取数据,这种也只能在特定网站生效;第二种是直接get或者post提交数据,这种难度有时候会较大,因为接口往往有一些限制;第三种就是直接模拟浏览器点击操作,第三种就比较无脑,可以实现很多第一第二种实现不了,比如Boss海投工具等。本文介绍的就是Selenium的基本用法。Python3中使用Selenium进行Web自动化测试是一种非常常见的方法。

qq_33445788的博客 2235

手把手教你写Python网络爬虫(1):网易云音乐歌单

摘要:从零开始写爬虫,初学者的速成指南! 需要免费获取本文章讲解的视频+源码,关注+转发此文然后私信我回复“音乐”即可领取资料,也欢迎大家和我一起交流学习Python,共同成长 封面: 封面 大家好,《手把手教你写网络爬虫》连载开始了!在笔者的职业生涯中,几乎没有发现像网络爬虫这样...

chupanzhuo4827的博客 234

手把手教你写网络爬虫

大家好,《手把手教你写网络爬虫》连载开始了!在笔者的职业生涯中,几乎没有发现像网络爬虫这样的编程实践,可以同时吸引程序员和门外汉的注意。本文由浅入深的把爬虫技术和盘托出,为初学者提供一种轻松的入门方式。请跟随我们一起踏上爬虫学习的打怪升级之路吧! 介绍 什么是爬虫? 先看看百度百科的定义: 简单的说网络爬虫(Web crawler)也叫做网络铲(Web scraper)、网络蜘蛛(We...

weixin_30830327的博客 146

python爬虫培训视频教程

回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 位卑未敢忘忧国,事定犹须待阖棺。 大家好,我是Python进阶者。 前言 前几天雪球兄在Python交流群里分享了一个获取B站视频选集的Python代码,小编觉得非常奈斯,这里整理成一篇小文章,分享给大家学习。 关于雪球兄,大家应该都熟悉了,之前他写过Python实战文章,好评如潮,没来得及看的小伙伴,可以戳这里了: 盘点常用验证码标注和识别项目线上部署三种方式——VUE前端、Java后端和Python后端部署

weixin_63757190的博客 268
上一篇: 【小白学爬虫连载(5)】--Beautiful Soup库详解
下一篇: 【小白学爬虫连载(7)】--scrapy框架的安装
哈希大数据
博客等级 码龄9年 331粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值