在python h5文件自动化下怎么获得h5的id

关注51Testing
轻松自动化---selenium-webdriver(python) (六)
发表于: 11:00 &作者:虫师 & 来源:51Testing软件测试网采编
推荐标签:
    get_attribute
    获得属性值。
    这个函数的用法前面已经有出现过,在定位一组元素的时候有使用到它,只是我们没有做过多的解释。
    一般用法:
select = driver.find_element_by_tag_name("select")
allOptions = select.find_elements_by_tag_name("option")
for option in allOptions:
print "Value is: " + option.get_attribute("value")
option.click()
    具体应用参考:
    定位一组元素:/fnng/p/3190966.html
    小结:
    学到这里我们是不是已经撑握了不少知识,简单的操作浏览器,定位元素,操作元素以及打印一些信息。其实,我们前面的学习中大多使用的是WebElement 里的方法。
    WebElement的方法:
    一般来说,所有有趣的操作与页面进行交互的有趣的操作,都通过 WebElement 完成
    classselenium.webdriver.remote.webelement.WebElement(parent, id_)
    这个类代表HTML页面元素
#当前元素的ID
#获取元素标签名的属性
#获取该元素的文本。
#单击(点击)元素
#清除一个文本输入元素的文本
get_attribute(name)
#获得属性值
s_selected(self)
#元素是否被选择
Whether the element is selected.
is_enabled()
#元素是否被启用
find_element_by_id(id_)
find_elements_by_id(id_)
#查找元素的id
find_element_by_name(name)
find_elements_by_name(name)
#查找元素的name
find_element_by_link_text(link_text)
find_elements_by_link_text(link_text)
#查找元素的链接文本
find_element_by_partial_link_text(link_text)
find_elements_by_partial_link_text(link_text)
#查找元素的链接的部分文本
find_element_by_tag_name(name)
find_elements_by_tag_name(name)
#查找元素的标签名
find_element_by_xpath(xpath)
#查找元素的xpath
find_elements_by_xpath(xpath)
#查找元素内的子元素的xpath
find_element_by_class_name(name)
#查找一个元素的类名
find_elements_by_class_name(name)
#查找元素的类名
find_element_by_css_selector(css_selector)
#查找并返回一个元素的CSS 选择器
find_elements_by_css_selector(css_selector)
#查找并返回多个元素的CSS 选择器列表
send_keys(*value)
#模拟输入元素
相关文章:
搜索风云榜
51Testing官方微信
51Testing官方微博
测试知识全知道Posts - 279,
Articles - 1,
Comments - 2859
大人不华,君子务实。
13:25 by 虫师, ... 阅读,
&&测试教程网,专业的selenium 学习网站。&
本节重点:
简单对象的定位
      -----自动化测试的核心
  对象的定位应该是自动化测试的核心,要想操作一个对象,首先应该识别这个对象。一个对象就是一个人一样,他会有各种的特征(属性),如比我们可以通过一个人的身份证号,姓名,或者他住在哪个街道、楼层、门牌找到这个人。
那么一个对象也有类似的属性,我们可以通过这个属性找到这对象。
定位对象的目的一般有下面几种
&&操作对象
&&获得对象的属性,如获得测试对象的class属性,name属性等等
&&获得对象的text
&&获得对象的数量
webdriver提供了一系列的对象定位方法,常用的有以下几种
&&class&name
&&link&text
&&partial&link&text
&&tag&name
&&css&selector
我们可以看到,一个百度的输入框,可以用这么用种方式去定位。
#coding=utf-8
from selenium import webdriver
import time
browser = webdriver.Firefox()
browser.get("")
time.sleep(2)
#########百度输入框的定位方式##########
#通过id方式定位
browser.find_element_by_id("kw").send_keys("selenium")
#通过name方式定位
browser.find_element_by_name("wd").send_keys("selenium")
#通过tag name方式定位
browser.find_element_by_tag_name("input").send_keys("selenium")
#通过class name 方式定位
browser.find_element_by_class_name("s_ipt").send_keys("selenium")
#通过CSS方式定位
browser.find_element_by_css_selector("#kw").send_keys("selenium")
#通过xphan方式定位
browser.find_element_by_xpath("//input[@id='kw']").send_keys("selenium")
############################################
browser.find_element_by_id("su").click()
time.sleep(3)
browser.quit()
OK~!通过上面一个例子,就帮我们展示了几种定位方式,下面来介绍每种定位方式:
id&和 name
id&和&是我们最最常用的定位方式,因为大多数控件都有这两个属性,而且在对控件的和命名时一般使其有意义也会取不同的名字。通过这两个属性使我们找一个页面上的属性变得相当容易
我们通过前端工具,找到了百度输入框的属性信息,如下:
&input id="kw" class="s_ipt" type="text" maxlength="100" name="wd" autocomplete="off"&
通过ind_element_by_id("kw")&函数就是捕获到百度输入框
通过find_element_by_name("wd")函数同样也可以捕获百度输入框
tag&name&和class&name
从上面的百度输入框的属性信息中,我们看到,不单单只有和&两个属性,比如和&标签名)
input&就是一个标签的名字,可以通过find_element_by_tag_name("input")&函数来定位。
class="s_ipt"
通过find_element_by_class_name("s_ipt")函数捕获百度输入框。
但是,碰下面的一组控件属性,我们就哭了。
&th width="95"&&/th&
&th width=""&文件名&/th&
&th class="c1"&创建时间&/th&
&th class="c1"&状态&/th&
&th class="c1"&文件大小&/th&
&th class="c1"&时长&/th&
下面的和&就没有上面的那么直观,如果不懂前端的话可能不太好理解
CSS(Cascading&Style&Sheets)是一种语言,它被用来描述HTML和XML文档的表现。CSS使用选择器来为页面元素绑定属性。这些选择器可以被selenium用作另外的定位策略。
CSS的比较灵活可以选择控件的任意属性,上面的例子中:
find_element_by_css_selector("#kw")
通过find_element_by_css_selector(&)函数,选择取百度输入框的属性来定义
也可以取属性
&a href="" name="tj_news"&新 闻&/a&
driver.find_element_by_css_selector("a[name=\"tj_news\"]").click()
可以取title属性
&a onclick="queryTab(this);" mon="col=502&pn=0" title="web" href="/"&网页&/a&
driver.find_element_by_css_selector("a[title=\"web\"]").click()
也可以是取
&a class="RecycleBin xz" href="javascript:void(0);"&
driver.find_element_by_css_selector("a.RecycleBin").click()
虽然我也没全部理解CSS的定位,但是看上去应该是一种非常灵活和牛X&的定位方式
扩展阅读:
什么是XPath:XPath基础教程:
selenium中被误解的:&
XPath是一种在XML文档中定位元素的语言。因为HTML可以看做XML的一种实现,所以selenium用户可是使用这种强大语言在web应用中定位元素。
XPath扩展了上面id和name定位方式,提供了很多种可能性,比如定位页面上的第三个多选框。
xpath:attributer (属性)
driver.find_element_by_xpath("//input[@id='kw']").send_keys("selenium")
#input标签下id =kw的元素
xpath:idRelative (id相关性)
driver.find_element_by_xpath("//div[@id='fm']/form/span/input").send_keys("selenium")
#在/form/span/input 层级标签下有个div标签的id=fm的元素
driver.find_element_by_xpath("//tr[@id='check']/td[2]").click()
# id为'check' 的tr ,定闪他里面的第2个td
xpath:position (位置)
driver.find_element_by_xpath("//input").send_keys("selenium")
driver.find_element_by_xpath("//tr[7]/td[2]").click()
#第7个tr 里面的第2个td
xpath: href (水平参考)
driver.find_element_by_xpath("//a[contains(text(),'网页')]").click()
#在a标签下有个文本(text)包含(contains)'网页' 的元素
xpath:link
driver.find_element_by_xpath("//a[@href='/']").click()
#有个叫a的标签,他有个链接href='/ 的元素
有时候不是一个输入框也不是一个按钮,而是一个文字链接,我们可以通过
#coding=utf-8
from selenium import webdriver
import time
browser = webdriver.Firefox()
browser.get("")
time.sleep(2)
browser.find_element_by_link_text("贴 吧").click()
time.sleep(2)
browser.quit()
一般一个那页面上不会出现相同的文件链接,通过文字链接来定位也是一种简单有效的定位方式。
Partial&Link&Text&定位
通过部分链接定位,这个有时候也会用到,我还没有想到很好的用处。拿上面的例子,我可以只用链接的一部分文字进行匹配:
browser.find_element_by_partial_link_text("贴").click()
#通过find_element_by_partial_link_text() 函数,我只用了&贴&字,脚本一样找到了"贴 吧" 的链接
--------------------------
学习更多selenium 内容:9274人阅读
python(1)
下面我们开始第一个简单的Android UI自动化测试
1.使用adb命令连接真机或模拟器
2.打开uiautomatorviewer工具
3.使用uiautomatorviewer工具获取应用的元素进行定位
4.简单介绍unittest框架的使用方法
5.使用Python编写猫宁考勤应用注册模块的自动化测试
1.使用adb命令连接真机或模拟器:
手机USB连接电脑,进入开发者模式;
cmd命令:adb devices ,查看手机是否连接
这是因为adb的端口被占用,我们需要查看是什么应用占用了这个端口(5037为adb默认端口)
cmd命令 : netstat -aon|findstr “5037”
可以看到占用5037端口对应的程序的PID号为8388;
cmd命令 : tasklist|findstr “8388”
可以看出8388对应的程序为kadb.exe,说明该程序正在使用5037端口;
这时我们需要在任务管理器中结束kadb.exe进程,按快捷键“Ctrl+Shift+Esc”调出Windows任务管理器,找到“kadb.exe”,单击下方的结束进程即可!
我们再次运行cmd命令:adb devices
这一步成功后我们才能运行sdk自带的uiautomatorviewer;
我们需要用uiautomatorviewer工具来获取元素,用于定位。
cmd命令:uiautomatorviewer,打开uiautomatorviewer界面
或者找到sdk目录:sdk\tools中找到uiautomatorviewer.bat文件双击运行
2.打开uiautomatorviewer工具
我们可以根据text,resource-id,class等元素进行定位
3.使用uiautomatorviewer工具获取应用的元素进行定位
这里我使用python自带的IDLE进行编写测试脚本,打开python文件找到IDLE(python GUI)双击打开,如图:
4.简单介绍unittest框架的使用方法
from uiautomator import device as d
import unittest
class Mytest(unittest.TestCase):
def setUp(self):
print "--------------初始化工作"
def tearDown(self):
print "--------------退出清理工作"
def test_login(self):
d(text="猫宁考勤").click()
print "--------------测试1"
def test_z(self):
print "--------------测试2"
def test_w(self):
print "--------------测试3"
if __name__ == '__main__':
unittest.main()
结果如下:
Testing started at 21:14 …
————–初始化工作
————–测试1
————–退出清理工作
————–初始化工作
————–测试3
————–退出清理工作
————–初始化工作
————–测试2
————–退出清理工作
Process finished with exit code 0
从结果中我们可以看出unittest框架的运行方式为:
5.使用Python编写猫宁考勤应用注册模块的自动化测试
from uiautomator import device as d
import time
import unittest
class MyTestSuite(unittest.TestCase):
def setUp(self):
print "--------------初始化工作"
def tearDown(self):
print "--------------退出清理工作"
def check_controls_exists(self, controls_text):
if d(text=controls_text).exists:
def check_controls_click_text(self, controls_text):
if d(text=controls_text).info.get("clickable") is True:
def check_ainb(self,resourceid,b):
if d(resourceId=resourceid).info.get("text") in
def test_Aregister(self):
time.sleep(2)
self.assertEqual(self.check_controls_click_text("注册"),1,u"猫宁考勤开启全新时代")
d(text="注册").click()
time.sleep(3)
self.assertEqual(self.check_text("com.isentech.attendancet:id/regis_phone","请输入手机号码"),
1,u"注册页面-》请输入手机号码")
self.assertEqual(self.check_text("com.isentech.attendancet:id/regis_verifycode","请输入验证码"),
1,u"注册页面-》请输入验证码")
self.assertEqual(self.check_controls_click_text("获取验证码"), 0,u"注册页面-》获取验证码")
self.assertEqual(self.check_controls_click_text("《中科爱讯服务协议》"), 1,u"注册页面-》《中科爱讯服务协议》")
self.assertEqual(self.check_controls_click_text("注册"), 0,u"注册页面-》注册")
time.sleep(2)
d(text="《中科爱讯服务协议》").click()
time.sleep(2)
self.assertEqual(self.check_ainb("com.isentech.attendancet:id/title","服务协议"), 1,u"注册页面-》服务协议")
time.sleep(1)
d(resourceId="com.isentech.attendancet:id/title_back").click()
time.sleep(1)
d(text="注册").click()
time.sleep(3)
d(resourceId="com.isentech.attendancet:id/regis_phone").set_text("1")
self.assertEqual(self.check_controls_click_text("获取验证码"), 0)
time.sleep(1)
d(text="注册").click()
time.sleep(1)
d(resourceId="com.isentech.attendancet:id/regis_phone").clear_text()
time.sleep(1)
d(resourceId="com.isentech.attendancet:id/regis_phone").set_text("11111")
self.assertEqual(self.check_controls_click_text("获取验证码"), 0)
time.sleep(1)
d(resourceId="com.isentech.attendancet:id/regis_phone").clear_text()
time.sleep(1)
d(resourceId="com.isentech.attendancet:id/regis_phone").set_text(phone_number)
self.assertEqual(self.check_controls_click_text("注册"), 0)
time.sleep(1)
d(text="注册").click()
time.sleep(1)
d(resourceId="com.isentech.attendancet:id/regis_verifycode").set_text("5648")
time.sleep(1)
self.assertEqual(self.check_controls_click_text("获取验证码"), 1)
time.sleep(2)
d(resourceId="com.isentech.attendancet:id/regis_pass").set_text("1")
d(resourceId="com.isentech.attendancet:id/regis_passAgain").set_text("1")
time.sleep(1)
self.assertEqual(self.check_controls_click_text("注册"), 0,u"密码只输入1个数字是否能注册")
time.sleep(1)
d(resourceId="com.isentech.attendancet:id/regis_pass").clear_text()
d(resourceId="com.isentech.attendancet:id/regis_passAgain").clear_text()
time.sleep(1)
d(resourceId="com.isentech.attendancet:id/regis_pass").set_text("123456")
d(resourceId="com.isentech.attendancet:id/regis_passAgain").set_text("12345")
time.sleep(1)
self.assertEqual(self.check_controls_click_text("注册"), 0,u"输入不相同的密码是否能注册")
time.sleep(1)
d(resourceId="com.isentech.attendancet:id/regis_pass").clear_text()
d(resourceId="com.isentech.attendancet:id/regis_passAgain").clear_text()
time.sleep(1)
d(resourceId="com.isentech.attendancet:id/regis_pass").set_text("123456")
d(resourceId="com.isentech.attendancet:id/regis_passAgain").set_text("123456")
time.sleep(1)
self.assertEqual(self.check_controls_click_resourceId("com.isentech.attendancet:id/regis_agree"), 1)
self.assertEqual(self.check_controls_click_text("注册"), 1)
time.sleep(2)
d(text="注册").click()
time.sleep(8)
except Exception, e:
print u"Error: 注册模块有问题\n", e
def test_app():
test_unit = unittest.TestSuite()
test_unit.addTest(MyTestSuite("test_Aregister"))
if __name__ == "__main__":
unittest.main()
uiautomator详细用法请参考这篇文章:
本人刚开始写博客,如有写的不明白之处可以加本人QQ进行学习交流:
或留言进行询问
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:11587次
排名:千里之外
评论:12条Python在自动化运维时经常会用到的方法_Linux编程_Linux公社-Linux系统门户网站
你好,游客
Python在自动化运维时经常会用到的方法
来源:Linux社区&
作者:小亮520cl
得到当前工作目录,即当前Python脚本工作的目录路径:os.getcwd()
返回指定目录下的所有文件和目录名:os.listdir()
函数用来删除一个文件:os.remove()
删除多个目录:osremovedirs(r"c:\python") &//略危险,熟练之后再用吧
检验给出的路径是否是一个文件:os.path.isfile() & //经常会用
检验给出的路径是否是一个目录:os.path.isdir() & &//经常会用
判断是否是绝对路径:os.path.isabs()
检验给出的路径是否真实存在:os.path.exists()
os.remove("file")
删除目录:
os.rmdir("dir") &//只能删除空目录
shutil.rmtree("dir") //空目录,有内容的目录都可以删
转换目录:
os.chdir("path") & //更换路径
返回一个路径的目录名和文件名:os.path.split()
例:import os&
os.path.split('/home/swaroop/byte/code/poem.txt')
结果为:('/home/swaroop/byte/code','poem.txt') & & //就是把路径和文件名分别列出来显得更加清楚
分离扩展名:os.path.splitext()&&&& os.path.splitext('/soft/dir1/test1.txt')('/soft/dir1/test1', '.txt')
获取路径名:os.path.dirname()&&& os.path.dirname('/soft/dir1/test1.txt')'/soft/dir1'
获取文件名:os.path.basename()&&& os.path.basename('/soft/dir1/test1.txt')'test1.txt'
运行shell命令:os.system()
读取和设置环境变量:os.getenv()与os.putenv()
给出当前平台使用的行终止符:os.linesep & windows使用'\r\n',linux使
用'\n'而mountainlion使用的是'\r'
显示你正在使用的平台:os.name 对于windows,他是'nt',而对于linux/unix
,他是'posix'
重命名:os.rename(old,new)
创建多集目录:os.makedirs(r"c:\python\test")
创建单个目录:os.mkdir("test")
获取文件属性 os.stat(file)
修改文件权限和时间戳:os.chmod(file)
终止当前进程:os.exit() &//python2.4可用
获取文件大小:os.path.getsize(filename)
#!/usr/bin/pythonimport ostardir='/soft/dir2'soudir='/soft/dir1'allfile=os.listdir(soudir)for fn in allfile:& & &fullpath=soudir+os.sep+fn& & &command="cp %s %s" %(fullpath,tardir)& & &if os.system(command) == 0:&& & & & print 'cp is ok'
[root@localhost class2]# more v3.py
#!/usr/bin/python
import os& & ---导入系统函数
import time&
---导入时间函数
source = ['/home/swaroop/byte', '/home/swaroop/bin']&
---待备份的路径或者文件
target_dir = '/mnt/e/backup/' & &---备份目的地
today = target_dir + time.strftime('%Y%m%d')& & ---时间函数取出今天的日期
now = time.strftime('%H%M%S')& & & & & & &
---时间函数取出现在的日期
comment = raw_input('Enter a comment --&')& & ---给备份输出一个注释
if len(comment) == 0:
& & target = today + os.sep + now + '.zip'& &
---- os.sep会根据你的操作系统给出目录分隔符
& & target = today + os.sep + now + '_' + comment.replace(' ', '_') + '.zip'
if not os.path.exists(today):& & & & & & & &
----判断目录是否存在
& & os.mkdir(today) # make directory& & & & ----调用linux命令
& & print 'Successfully created directory', today
zip_command = "zip -qr '%s' %s" % (target, ' '.join(source))& & ---joi指定空分割符,备份
if os.system(zip_command) == 0:& & & &
os.system函数 运行 命令,利用这个函数就好像在 系统 中运行命令一样。即在shell中运行命令&&如果命令成功运行,它返回0,否则它返回错误号。
& & print 'Successful backup to', target
& & print 'Backup FAILED'
文件操作:
os.mknod("test.txt") & &创建空文件
fp = open("test.txt",w) 直接打开一个文件,如果文件不存在则创建文件
关于open/file的模式:
w 以写的方式打开
a 以追加的模式打开(从EOF开始,必要时创建新文件)
r+ 以读写模式打开
w+ 以读写模式打开 //据说不好用
a+ 以读写模式打开 //我比较喜欢用,读写打开后追加
rb 以二进制读模式打开
wb 以二进制写模式打开
ab 以二进制追加模式打开
rb+ 以二进制读写模式打开
wb+ 以二进制读写模式打开
ab+ 以二进制读写模式打开
fp.read([size]) & & //size 为读取长度,以byte为单位
fp.readline([size]) //读一行,如果定义了size,有可能返回的只是一行的一
fp.write(str) & &//把str写到文件中,write()并不会在str后加上一个换行符
fp.writelines(seq) //把seq的内容全部写到文件中(多行一次性写入)。这个
函数也只是忠实地写入,不会在每行后面加任何东西
fp.close() &
fp.flush() & & &//把缓冲区的内容写入硬盘
fp.fileno() & & //返回一个长整形的&文件标签&
fp.isatty() //文件是否是一个终端设备文件(unix系统中的)
fp.tell() //返回当前位置,比如:
fp = open("zhige.txt",'a+') &//zhige.txt里的内容为zhigedahaoren
fp.read(3)
c = fp.tell()
print c & //会返回显示zhigedahaoren里的第三个字母i
fp.next() & //返回下一行,并将文件操作标记位移动到下一行
把一个file用于for...in file 这样的语句时,就是调用next()函数来实现遍历
fp.seek(offset[,whence]) & //讲文件的游标移动到offset的位置和tell搭配
做实验看比较明显
fp.truncate([size]) & &//把文件裁成规定的大小,默认的是裁到当前文件操
作坐标的位置。如果size比文件大小还要大,依据系统的不同,可能是不改变文
件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。
目录操作: & //感觉可以用 os.system('')里写shell完成
os.mkdir("file") &创建目录
复制文件:
shutil.copyfile("oldfile","newfile") &//oldfile和newfile都智能是文件
shutil.copy("oldfile","newfile") //oldfile只能是文件,newfile可
以是文件,也可以是目标目录
复制文件夹:
shutil.copytree("olddir","newdir") //olddir和newdir都只能是目录,
且newdir必须不存在
重命名文件(目录):
os.rename("oldname","newname") //文件或目录都是这条命令
移动文件(目录)
shutil.move("oldpos","newpos")
一些详解:
seek(offset,where): where=0从起始位置移动,1从当前位置移动,2
从结束位置移动。当有换行时,会被换行截断。seek()无返回值,故值为None。
tell(): 文件的当前位置,即tell是获得文件指针的位置,受
seek,readline,read,readlines影响,不受truncate影响
truncate(n):从文件的首行字符开始截断,截断文件为n个字符;无n
表示从当前位置起截断;阶段之后n后面的说有字数被删除。其中win下的换行代
表2个字符大小。
readline(n):读入若干行,n表示读入的最长字节数。其中读取的开始
位置为tell()+1。当n为空时,默认只读当前行的内容
readlines 读入所有行内容
read 读入所有行内容
二、以下以一个例子说明以上各函数的作用
fso = open("f:\\a.txt",'w+') & &//以w+方式,并非a方式打开文件,故文件
原内容被清空
print fso.tell() & //文件原内容被清空,故此时tell()=0
fso.write("abcde\n") //写入文件abcde\n,因为换行\n占2个字符,故写入了7
print fso.tell() &此时tell()=7
fso.write("fghwm") //又写入文件fghwm,故此时文件共写入7+5=12个字符
print fso.tell() & //此时tell()=12
fso.seek(1,0) &//从其实位置即文件首行首字符开始移动一个字符
print fso.tell() & //此时tell()=1
print fso.readline() //读取当前行,即文件的第一行,但是会从第二个字符
开始读,结果为bcde
//若换成for读取整个文件或者read读取整个文件则结果为bcdefghwm
print fso.tell() & //因为readline此时tell()=7
fso.truncate(8) //从写入后文件的首行字符开始算,截断为8个字符,即
abced\nf,即文件内容为:abcde\nf
print fso.tell() &//tell()依旧为7,并为受truncate(8)的影响,但此时文件
的内容为abcde\nf
print fso.readline() &//从tell()+1=8 开始读取,读取当前行内容:f
下面关于Python的文章您也可能喜欢,不妨看看:
Linux下Python的安装以及注意事项&
14.04 下安装使用Python rq模块&
无需操作系统直接运行 Python 代码&
上源码安装Python3.4&
《Python核心编程 第二版》.(Wesley J. Chun ).[高清PDF中文版]
《Python开发技术详解》.( 周伟,宗杰).[高清PDF扫描版+随书视频+代码]
Python脚本获取Linux系统信息
在Ubuntu下用Python搭建桌面算法交易研究环境
Python 语言的发展简史
Python 的详细介绍:Python 的下载地址:&
本文永久更新链接地址:
相关资讯 & & &
& (11/28/:00)
& (02/28/:42)
& (10/22/:42)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款

我要回帖

更多关于 python 读取h5 的文章

 

随机推荐