【必看】自动化测试:selenium(环境部署和元素定位)

news2024/11/24 9:50:07

 一、什么是selenium?

 > 一个web自动化测试工具;

二、主流的自动化工具:
 

 > QTP:收费 支持(支持web、桌面软件自动化)
 > selenium:免费,开源 只支持web项目
 > Robot frameword: 基于Python扩展关键字驱动自动化工具

注意:要是用selenium自动化工具,要先下载安装selenium

一、web自动化环境部署

1.1 selenium安装

1、安装

在cmd 直接输入 :pip install selenium

2、卸载:

在cmd输入:pip uninstall selenium

3、查看:

pip show selenium 或者 pip list

pip 是python中包管理工具(可安装,可卸载,查看python工具),使用pip的时候必须联网

有的输入 pip install selenium 会提示出现 ‘pip’ 不是内部或外部命令,也不是可运行的程序或批处理文件。产生这个原因python环境内部没有 pip 路径,则需要我们收到导入

​解决方法:

​1、找到我们python工具中的pip所在文件夹,复制其路径

2、右键,点击我的电脑 选择属性,点击高级系统设置,再点击环境变量

3、点击环境变量后,找到Path然后编辑,把复制上的路径粘贴进去就可以了。

同时,我也准备了一份软件测试视频教程(含接口、自动化、性能等),需要的可以直接在下方观看,或者直接关注VX公众号:互联网杂货铺,免费领取

软件测试视频教程观看处:

B站最用心的自动化测试教程,从入门到进阶(全600集),通俗易懂,2023最新版,学完即就业!学不会我立马退出测试界!

1.2 浏览器驱动获取

这里有多种浏览器,但是很多浏览器都是用的,谷歌,火狐,Edge中的内核,在这里讲的就是最具有代表性的谷歌浏览器

获取谷歌浏览器的驱动地址:http://chromedriver.storage.googleapis.com/index.html

1)、获取浏览器的版本一定要选本地电脑谷歌浏览器版本号一样,注意:这里可能有些版本驱动地址没有一模一样的,但是可以选择用 . 号隔开的前三位必须相同,第四位可以选最接近你浏览器版本的那个数。后面一步的是有,这里只有win32位,但是不影响,64位也能用这个驱动,但是显示的是64位,那么32位就不能用了,这里选择对应操作系统就可以了。

1.3 浏览器驱动安装

下载好驱动压缩包过后,解压得到 chromedriver.exe 驱动程序把他放进Python解释器根目录下,就ok了

二、web自动化的基本代码

步骤:

1、导包
2、实例化浏览器对象
3、打开网页
4、时间轴观察效果
5、关闭网页

"""
web 自动化基本代码
"""
# 1、导包
from time import sleep
from selenium import webdriver

# 2、实例化浏览器对象:类名()
driver = webdriver.Chrome()

# 3、打开网页包含协议头
driver.get('https://www.baidu.com/')

# 4、时间轴观察效果
sleep(5)

# 5、关闭网页
driver.quit()

三、八大元素定位

1、为什么要使用元素定位?

​计算机无法向人一样,所见即所得,因此需要通过元素定位来指定计算机所定位的元素来进行操作

2、定位工具

​ 1)、谷歌使用 F12 进入开发者工具

​ 2)、右键点击检查进入开发者工具

3、定位元素是依赖于什么?

​ 标签名、属性、层级、路径

定位方式:
1、id
2、name
3、class_name(使用的是class属性进行定位)
4、teg_name (标签名称)
5、link_text(定位超链接 a 标签)
6、partial_link_text(定位超链接 a 标签 包含关系)
7、xpath (路径)
8、css (元素选择器)

注意:这是 selenium 框架中提供的八大元素定位方法,只要能够定位目标元素,用哪一种都无所谓,最常用的是 id ,xpath,css

3.1 id定位方法

说明:通过元素的id属性定位,id一般情况下在当前页面中是唯一。

# 语法:
find_element_by_id(元素value)
1、元素定位:首先调用find_element_by_id(元素value)获得元素定位
2、调用send_keys来填写内容
3、通过⽬标元素的 id 属性值定位, 由于 id 值一般是唯一的,因此当元素存在 id 属性值时, 优先使用 id 方法定位元素
# 元素定位:首先调用find_element_by_id(元素value)获得元素定位

# 导包
from time import sleep
from selenium import webdriver

# 实例化浏览器对象
driver = webdriver.Chrome()

# 打开网址url
driver.get('https://www.baidu.com/')

# 需求
driver.find_element_by_id('kw').send_keys('易烊千玺')

# 观察效果
sleep(3)

# 关闭网页
driver.quit()

3.2 name定位方法

说明:通过元素的name属性来定位, name一般名称为重复

提示:元素必须要有name属性

1、name方法:由于元素的 name 属性值可能存在重复, 必须确定其能够代表⽬标元素唯⼀性之后, ⽅可使⽤
2、当页⾯面内有多个元素的特征值是相同的时候, 定位元素的⽅法执⾏时,默认只会获取第⼀个符合要求的特征对应的元素
3、因此, 定位元素时需要尽量保证使⽤的特征值能够代表⽬标元素在当前⻚页⾯内的唯⼀性!否则定不了位,添加在第一个定位的位置

name 的定位方法不是唯一的,默认只会获取第⼀个符合要求的特征对应的元素,在确认他是第一个符合要求的特征对应的元素,即可使用。

错误示范:

所以要精准找到在确认他是第一个符合要求的特征对应的元素,方可用这个方法。

driver.find_element_by_name('name的值')
# 导包
from time import sleep
from selenium import webdriver

# 实例化浏览器对象
driver = webdriver.Chrome()

# 打开网址url
driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/%E6%B3%A8%E5%86%8CA.html')

# 需求
username = driver.find_element_by_name('userA')
username.send_keys('易烊千玺')
password = driver.find_element_by_name('passwordA')
password.send_keys('12123')

# 观察效果
sleep(3)

# 关闭网页
driver.quit()

3.3 class_name 方法

说明:通过元素的class属性来定位,class属性一般为多个值。

提示:元素必须要有class属性

注意:

1、方法名是class_name ,但是我们找的是class属性

2、如果元素的 class 属性值存在多个值, 在 class_name 方法使用时, 只能使⽤其中的任意⼀一个

# 语法
driver.find_element_by_class_name
"""
class_name 方法:方法名是 class_name, 但要找元素的 class 属性值
"""

# 1、导包
from time import sleep

from selenium import webdriver
# 2、实例化浏览器对象
driver = webdriver.Chrome()
# 3、打开网页
driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/%E6%B3%A8%E5%86%8CA.html')

tel = driver.find_element_by_class_name('telA')
tel.send_keys('18611111111')

"""
如果元素的 class 属性值存在多个值, 在 class_name ⽅法使用时, 只
能使用其中的任意⼀个
"""
# mail = driver.find_element_by_class_name('emailA dzyxA') # 错误写法
# mail = driver.find_element_by_class_name('emailA') # 正确写法
mail = driver.find_element_by_class_name('dzyxA') # 正确写法

mail.send_keys('123@qq.com')

# 4、观察效果
sleep(3)

# 5、关闭网页
driver.quit()

3.4 tag_name 方法

说明:通过元素的标签名称来定位,标签名(查看元素时尖括号(<)紧挨着的单词或字母就是标签名) (标签名也就是元素名)

# 语法
driver.find_element_by_tag_name("标签名")

tag_name 方法:由于存在大量标签,并且重复性更高,因此必须确定其能够代表目标元素唯一性之后,方可以使用;如果页面中存在多个相同标签,默认返回第一个标签元素。

注意:一般标签重复性过高,要精确定位,都不会选择tag_name !

# 导包
from time import sleep
from selenium import webdriver

# 实例化浏览器对象
driver = webdriver.Chrome()
# 打开网址url
driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/%E6%B3%A8%E5%86%8CA.html')
# 需求
username = driver.find_element_by_tag_name('input')
username.send_keys('admin')
# 观察效果
sleep(3)
# 关闭网页
driver.quit()

3.5 link_text

说明:定位超链接标签

注意:1、只能使用精准匹配(a标签的全部文本内容)

          ​ 2、该⽅法只针对超链接元素(a 标签),并且需要输入超链接的全部⽂本信息

点击方法:元素对象 .click()

# 语法:
driver.find_element_by_link_text('文本内容').click()
# 导包
from time import sleep
from selenium import webdriver

# 实例化浏览器对象
driver = webdriver.Chrome()
# 打开网址url
driver.get('https://www.baidu.com/')
# 需求
username = driver.find_element_by_link_text('新闻').click()
# 观察效果
sleep(3)
# 关闭网页
driver.quit()

3.6 partial_link_text

说明:定位超链接标签

注意:

1. 可以使用精准或模糊匹配,如果使用模糊匹配最好使用能代表唯一的关键词
2. 如果有多个值,默认返回第一个值

# 语法
driver.find_element_by_partial_link_text('模糊匹配').click()

3.7 定位一组元素的方法

通常我们定义元素方法的是 driver.find_element_by_xxx,但是也有 driver.find_elements_by_xxx这种element后面带s,表示执行结果返回的是列表类型,里面的数据是多个元素对象。

说明:1、我们可以获取列表下标获取对应的目标元素

          ​ 2、其他元素定位方法也可以实行定义一组元素

          ​ 3、使用标签名定位操作# 语法

# 语法
driver.find_elements_by_xxx
"""
id 列表定位
"""

# 导包
from time import sleep
from selenium import webdriver

# 实例化浏览器对象
driver = webdriver.Chrome()
# 打开网址url
driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/%E6%B3%A8%E5%86%8CA.html')
# 需求
element = driver.find_elements_by_id('AAA')
element[0].send_keys('admin')
element[1].send_keys('123456')
# 观察效果
sleep(3)

# 关闭网页
driver.quit()
"""
使用标签名进行定位
"""
# 导包
from time import sleep
from selenium import webdriver

# 实例化浏览器对象
driver = webdriver.Chrome()
# 打开网址url
driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/%E6%B3%A8%E5%86%8CA.html')
# 需求
new_els = driver.find_elements_by_tag_name('input')
new_els[0].send_keys('admin')
new_els[1].send_keys('123456')
# 观察效果
sleep(3)

# 关闭网页
driver.quit()

总结:

1、id,name,class,都是依赖于元素这三个对应的属性,如果元素没有这个三个属性,定位方法不能使用;

2、link_text, partial_link_text: 只适合超链接定位

3、tag_name: 只能找页面唯一元素,或者 页面中多个相同元素中的第一个元素

3.8 xpath ☆

说明:Xpath策略有多种,无论使用哪一种策略(方法),定位的方法都是同一个,不同策略只决定方法的参数的写法

# Xpath 定位方法:
driver.find_element_by_xpath('Xpath的策略')
3.8.1 获取路径策略

1、什么是Xpath定位:

​ 基于元素的路径定位

2、Xpath常用的定位策略:

2.1绝对路径:从最外层元素到指定元素之间所有经过元素层级的路径 ,绝对路径是以/html根节点开始,使用 / 来分割元素层级
    2.1.1语法:/html/body/div/fieldset/form/p[1]/input (可能会有多个p标签,所以也是用索引的方式定位,是从一开始以便读者看懂)

绝对路径对页⾯结构要求比较严格,不建议使⽤!!!!

2.2相对路径:匹配任意层级的元素,不限制元素的位置 ,相对路径是以 // 开始, // 跟元素名称,不知元素名称可以使用*代替。
    2.2.1语法://input 或者 //*

推荐使用相对路径!!

3、直接获取路径值

3.8.2 利用元素属性策略

1、路径结合属性

该方法可以使用目标元素的任意一个属性和属性值(需要保证唯⼀性)

# 语法1://标签名[@属性名='属性值']
# 语法2://*[@属性名='属性值']

注意:

1、使用 XPath 策略, 需要在浏览器⼯具中根据策略语法, 组装策略值,验证后再放入代码中使用

2、⽬标元素的有些属性和属性值, 可能存在多个相同特征的元素, 需要注意唯一性 
 

2、路径结合逻辑(多个属性)

解决的是单个属性和属性值无法定位元素唯一性的问题。

# 语法: //*[@属性1="属性值1" and @属性2="属性值2"]


注意:多个属性可有由 多个 and 链接,每一个属性前面都要有 @ 开头,可以根据需求使用更多属性值

3、层级和属性结合策略

目标元素⽆法直接定位, 可以考虑先定位其父层级或祖辈层级, 再获取目标元素

# 语法://*[@id='父级id属性值']/input    (⽗层级定位策略/目标元素定位策略)

代码实现:

# 导包
from time import sleep
from selenium import webdriver

# 实例化浏览器对象
driver = webdriver.Chrome()
# 打开网址url
driver.get('https://www.baidu.com/')
# 需求
# 1、相对路径
ele = driver.find_element_by_xpath('//*[@id="kw"]')
ele.send_keys('易烊千玺')

# 2、绝对路径
driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[5]/div[1]/div/form/span[1]/input').send_keys('易烊千玺')

# 3、路径结合属性  语法1://标签名[@属性名='属性值']
driver.find_element_by_xpath("//input[@id='kw']").send_keys('易烊千玺')
# 语法2: //*[@属性名='属性值']
driver.find_element_by_xpath("//*[@id='kw']").send_keys('易烊千玺')

# 4、路径结合逻辑(多个属性)
driver.find_element_by_xpath("//*[@id='kw' and @name ='wd']").send_keys('易烊千玺')

# 5、层级和属性结合策略
driver.find_element_by_xpath("//*[@id='s_kw_wrap']/input").send_keys('易烊千玺')

# 观察效果
sleep(3)

# 关闭网页
driver.quit()
3.8.3 xpath 扩展
1. //*[text()='文本信息'] # 定位文本值等于XXX的元素  
	提示:一般适合 p标签,a标签 
2. //*[contains(@属性,'属性值的部分内容')] # 定位属性包含xxx的元素 【重点】
	提示:contains为关键字,不可更改。 
3. //*[starts-with(@属性,'属性值的开头部分')] # 定位属性以xxx开头的元素
	提示:starts-with为关键字不可更改
# 导包
from time import sleep
from selenium import webdriver

# 实例化浏览器对象
driver = webdriver.Chrome()
# 打开网址url
driver.get('https://www.baidu.com/')

# 需求
# driver.find_element_by_xpath("//*[text()='新闻']").click()
# driver.find_element_by_xpath("//*[contains(@autocomplete,'f')]").send_keys('易烊千玺')
driver.find_element_by_xpath("//*[starts-with(@autocomplete,'o')]").send_keys('易烊千玺')

sleep(3)

# 关闭网页
driver.quit()

3.9 css定位 ☆

通过 css 的选择器语法定位元素

1、Selenium框架官方推荐使用 css ,因为定位效率高于xpath

2、 CSS一种标记语言,焦点:数据的样式。控制元素的显示样式,就必须先找到元素,在css标记语言中找元素使用css选择器;

3、css的选择策略也有很多,但是无论选择哪一种选择策略都是用的同一种定位方法

# 方法:
driver.find_element_by_css_selector('css策略')
常用策略:
1、id 选择器
	语法:#id属性值
2、class 选择器
	语法:.class属性值(如果使⽤具有多个值的 class 属性,则需要传入全部的属性值 语法:[class="全部属性值"])
3、属性选择器
	语法1:[属性名=“属性值”]
	语法2:标签名[属性名=“属性值”]
4、标签选择器
	语法:标签名 如input,button
5、层级选择器
	父子层级关系:父层级策略 > 子层级策略 (也可以使用空格连接上下层级策略)
	祖辈后代层级关系:祖辈策略 后代策略
	提示:>与空格的区别,大于号必须为子元素,空格则不用。
# 导包
from time import sleep
from selenium import webdriver

# 实例化浏览器对象
driver = webdriver.Chrome()
# 打开网址url
driver.get('https://www.baidu.com/')

# 需求
# 语法id:#id属性值
driver.find_element_by_css_selector('#kw').send_keys('易烊千玺')

# 语法class:.class属性值 如: '.talA'
# 语法class有多个属性值的时候:[class="全部属性值"]
driver.find_element_by_css_selector('[class="s_ipt"]').send_keys('易烊千玺')

# 语法属性选择器
driver.find_element_by_css_selector('input[id="kw"]').send_keys('易烊千玺')
driver.find_element_by_css_selector('[name="wd"]').send_keys('易烊千玺')

# 语法层级选择器
# 父层级策略 > 子层级策略
driver.find_element_by_css_selector('#s_kw_wrap>input').send_keys('易烊千玺')
driver.find_element_by_css_selector('#form input').send_keys('易烊千玺')

sleep(3)

# 关闭网页
driver.quit()
3.9.1 css的扩展方法 ☆
1. [属性^='开头的字母'] # 获取指定属性以指定字母开头的元素
2. [属性$='结束的字母'] # 获取指定属性以指定字母结束的元素
3. [属性*='包含的字母'] # 获取指定属性包含指定字母的元素
# 导包
from time import sleep
from selenium import webdriver

# 实例化浏览器对象
driver = webdriver.Chrome()
# 打开网址url
driver.get('https://www.baidu.com/')
# 需求
# 语法1:[属性^='开头的字母'] # 获取指定属性以指定字母开头的元素
driver.find_element_by_css_selector("[class^='s_i']").send_keys('易烊千玺')

# 语法2:[属性$='结束的字母'] # 获取指定属性以指定字母结束的元素
driver.find_element_by_css_selector("[class$='pt']").send_keys('易烊千玺')

# 语法3:[属性*='包含的字母'] # 获取指定属性包含指定字母的元素
driver.find_element_by_css_selector("[autocomplete*='f']").send_keys('易烊千玺')

sleep(3)

# 关闭网页
driver.quit()

也可以直接自动生成css的路径,跟xpath步骤一样:

四、总结 

PS:这里分享一套软件测试的自学教程合集。对于在测试行业发展的小伙伴们来说应该会很有帮助。除了基础入门的资源,博主也收集不少进阶自动化的资源,从理论到实战,知行合一才能真正的掌握。全套内容已经打包到网盘,内容总量接近500个G。如需要软件测试学习资料,关注公众号(互联网杂货铺),后台回复1,整理不易,给个关注点个赞吧,谢谢各位大佬!

☑ 240集-零基础到精通全套视频课程
☑ [课件+源码]-完整配套的教程
☑ 18套-测试实战项目源码
☑ 37套-测试工具软件包
☑ 268道-真实面试题
☑ 200个模板-面试简历模板、测试方案模板、软件测试报告模板、测试分析模版、测试计划模板、性能测试报告、性能测试报告、性能测试脚本用例模板(信息完整)

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1043915.html

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

相关文章

VM装Windows虚拟机扩容

1.进入服务器CMD模式&#xff0c;输入diskpart&#xff0c;回车 2.查看卷 list volume 3.指定扩容的磁盘 select volume 1 4.查看磁盘 list disk 5.查看逻辑分区 list parttition 6.选择需要扩展的逻辑分区 select partition 1 7.扩展 extend 8.退出并查看磁盘大小

Linux系统离线安装Python

目录 一、简介 二、前提准备 三、下载Python源码 四、将离线python包传输到Linux主机 五、编译以及创建软链接 一、简介 由于工作原因&#xff0c;我们经常会在内网环境下使用Linux&#xff0c;不过这样会让我们安装一些软件变得困难&#xff0c;例如需要安装Python。虽然…

工业静电控制ESD防静电手环监控看板的优势

在现代工业生产中&#xff0c;静电问题一直是令人头痛的难题。静电不仅会对产品质量造成严重影响&#xff0c;还可能导致设备故障和生产线停工。为了解决这一问题&#xff0c;一种新型的防静电监测系统应运而生——ESD防静电手环监控看板。该系统采用全自动智能测量、预警和提示…

2023《生信知识库》订阅

写在前面 自2021年11月末&#xff0c;我们开始通过《小杜的生信笔记》分享自己的学习笔记。我们的教程也受到很多同学的关注。我们的分享主要基于小杜自己的学习笔记&#xff0c;如画图&#xff0c;分析等。在知乎中&#xff0c;我们推出一期R语言绘图总汇https://zhuanlan.zhi…

【工具使用】Audition软件导入.sesx文件报错问题

一&#xff0c;简介 本文主要介绍了在使用Audition导入新的wav文件后&#xff0c;保存&#xff0c;然后再打开.sesx文件时报错&#xff1a;“ 错误: 文件已损坏或使用了不受支持的格式 XML FATAL ERROR: (line: 2835, col: 69) [ D:\Project\AE_Y2311\16channel_test\16_chann…

2023-9-26 JZ22 链表中倒数最后k个结点

题目链接&#xff1a;链表中倒数最后k个结点 import java.util.*;/** public class ListNode {* int val;* ListNode next null;* public ListNode(int val) {* this.val val;* }* }*/public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xf…

多协议远程管理 Termius for Mac中文

Termius是一款功能全面、易于使用的远程访问和SSH客户端软件&#xff0c;提供了许多有用的功能和工具&#xff0c;适用于开发人员、系统管理员和网络工程师等需要远程管理和访问服务器的用户。 跨平台支持&#xff1a;Termius可在多个操作系统上运行&#xff0c;包括Windows、…

autojs项目搭建和入门实践

Auto.js 是一款无需root权限的javascript自动化软件&#xff0c;它可以帮助用户在手机上自动执行各种任务&#xff0c;比如自动填写表单、自动点击按钮、自动切换应用等&#xff0c;并且可以通过图形用户界面来管理和编辑脚本。 软件环境 操作系统&#xff1a;win10 VSCODE&…

seata的启动与使用

1 下载seata 下载地址&#xff1a;https://github.com/seata/seata/releases/v0.9.0/ 1.1 修改配置文件 将下载得到的压缩包进行解压&#xff0c;进入conf目录&#xff0c;调整下面的配置文件&#xff1a; registry.conf registry {type "nacos"nacos {serverA…

ARM IIC总线实现温湿传感器

IIC.h #ifndef __IIC_H__ #define __IIC_H__ #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h"/* 通过程序模拟实现I2C总线的时序和协议* GPIOF ---> AHB4* I2C1_SCL ---> PF14* I2C1_SDA ---> PF15** */#define SET_SDA_OUT do{G…

VR全景如何助力乡村振兴,VR全景推动农业发展

引言&#xff1a; 乡村振兴是当前我国发展的重要战略&#xff0c;而VR全景技术作为一种创新的数字技术&#xff0c;帮助乡村增加曝光率&#xff0c;为乡村发展提供了机遇&#xff0c;助力乡村振兴。 一.促进乡村文化传承与旅游发展 1.通过VR全景技术&#xff0c;传承乡村文化…

如何评估商城源码的安全性和稳定性?

评估商城源码的安全性和稳定性是选择合适的商城源码的关键一步。以下是一些方法和指标&#xff0c;可用于评估商城源码的安全性和稳定性。希望对大家有所帮助(仅供参考)。 1、源码质量 商城源码的质量是评估其安全性和稳定性的重要指标之一。我们技术可以检查源码的编码规范、…

数据库导入文字不乱吗 CSV

phpMyadmin建立数据库&#xff06;设置外键&#xff06;导入csv文件 - 知乎

CMOS图像传感器——Stack Pixel(2)

在去年的时候, 就写过Sony大法的Stack Pixel CMOS图像传感器——Stack Pixel_stacked-pixel cis_沧海一升的博客-CSDN博客对索尼的2-Layer Transistor Pixel技术进行了介绍_stacked-pixel cishttps://blog.csdn.net/qq_21842097/article/details/127007460 IEDM 2021 上…

动手学深度学习(pytorch版)第二章2.1 Note-ndarray

1.入门 x torch.arange(12) //首先&#xff0c;我们可以使用 arange 创建一个行向量 x。这个行向量包含以0开始的前12个整数&#xff0c; //它们默认创建为整数。也可指定创建类型为浮点数。张量中的每个值都称为张量的元素&#xff08;element&#xff09; x.shape x.numel…

Educational Codeforces Round 155 (Rated for Div. 2) - D Sum of XOR Functions

学到的几个知识点&#xff1a; 1.拆位 对于整体上的异或操作可以转化为31个二进制位上的操作&#xff0c;每一位再上 。 将一次操作拆为31次来方便操作。 2. s[i]表示异或前缀和&#xff0c;l~r间的异或和为s[r] ^ s[l - 1] ----> 拆完位后这个公式还能再推出一个性…

【CentOS7】安装docker

【CentOS7】安装docker 1.Docker 要求 CentOS 系统的内核版本高于 3.10 &#xff0c;通过命令查看你当前的内核版本 。2.使用 root 权限登录 Centos&#xff0c;将 yum 包更新到最新。&#xff08;确保联网&#xff09;3. 如果安装过旧版本的话&#xff0c;卸载旧版本4. 设置yu…

初识Load Runner

Load Runner安装 为什么选择Load Runner Load Runner 有强大的录制功能&#xff0c;Jmeter没有录制功能Load Runner 可以设计丰富的测试场景Load Runner 能够产出丰富的测试报告 Load Runner三大组件之间的关系 每个组件分别是干什么的&#xff1f; virtual User Generator…

搭建Vue的开发环境,Edge浏览器安装VUE拓展工具

一、在下载vue.js文件 在vue官网中下载开发版本的vue.js文件--> 安装 — Vue.js (vuejs.org) 二、将vue.js导入到项目中 这时候我们运行项目控制台会抛出两个错误 三、安装拓展工具 这里以Edge浏览器为例&#xff0c;其他浏览器上可在拓展管理商店中下载 进入Edge的拓展…

python安全工具开发笔记(六)——Python爬虫BeautifulSoup模块的介绍

一、Python爬虫基础知识介绍 1.1 Python相关库 1、requests、re 2、BeautifulSoup 3、hackhttp 1.2 Python BeautifulSoup Python BeautifulSoup模块的使用介绍∶ 1、解析内容 from bs4 import BeautifulSoup soup BeautifulSoup(html_doc) 2、浏览数据 soup.title soup…