Selenium入门代码及元素定位详解

Selenium入门脚本详解

3行入门代码

'''
知识点:
'''

from selenium import webdriver
'''
导入:
	1.必须要安装好环境才可以导入
	2.ctrl+鼠标左键点击selenium》》可以打开__init__查看源码
	3.右键打开Explorer可以查看selenium物理文件的路径
	4.from selenium (包) import webdriver (包)
'''

driver = webdriver.Chrome()	
'''
定义一个变量driver 接收webdriver.Chrome()
	1.webdriver.Chrome() ===>>Chrome类,实例化
	2.点击webdriver得到
		from .chrome.webdriver import Webdriver as Chrome	# naqa
			webdriver目录下>chrome目录>webdriver,py Webdriver类别名Chrome
	3.Chrome首字母要大写,()实例化不要漏了
'''

driver.get('https://www.baidu.com')
'''
1.http的基础知识:URL格式 schema不要漏了
2.http的请求方式:get
3.输入URL时直接复制地址栏的地址即可附带协议
'''

查看所有Webdriver的方法

driver = webdriver.Chrome()	# Chrome

查看所有Chrome实例的方法

driver.get('https://www.baidu.com')	# get

更换导入方式

# 原生导入:
	from selenium.webdriver.chrome.webdriver import WebDriver
	driver = WebDriver()

打开本地文件

'''
知识点:
	1.pycharm的实时模板:file》settings》实时模板》user》定义模板
	2.pycharm的插件:file》settings》plugin》marketplace
除1之外,其他了解即可
'''
from selenium import webdriver
driver = webdriver.Chrome()
test_flag = 4
if test_flag ==1:
	# os库打开
	import os
	test_html = os.path.abspath('test.html')
	driver.get('test.html')
if test_flag ==2:
	driver.get(R'D:\.\..\...\test.html')	# R为原始字符串,也可以写作r
	'''
	1.可以直接复制文件路径引用,./也不可以,打开文件必须使用文件的绝对路径
	2.mac前需要加 file:/// ---> win同样适用
	'''
if test_flag ==3:
	driver.get(r'file:///d:\.\..\...\test.html')

if test_flag ==4:
	from pathlib import Path	# 标准库
	test_html_v2 = str(Path('test.html').resolve())
	'''
	Path('test.html') 得到一个windowspathlib的对象
	resolve() 得到一个绝对路径
	str 转换成字符串
	'''
	driver.get(test_html_v2)

用上下文管理器打开

'''
知识点:
	with 上下文管理器 对象实现了__enter__ __exit__两个方法
'''
from selenium import webdriver
from time import sleep	# 导入sleep模块
with webdriver.Chrome() as driver:
	driver.get('https://www.baidu.com')
	sleep(2)	# 等待

截取Selenium日志

基础定位、XPATH定位及语法

Selenium核心技术概览

认识WebDriver的核心方法

from selenium import webdriver
print('webdriver的对象类型是:',type(webdriver))	

'''
格式化 》》让输出美观一点
'''
print('|对象属性(方法)|说明|')
print('|---|---|')

for _ in dir(webdriver):	# dir 查看对象的所有方法;_ 是变量名
	if _[0]!='_':	# 索引为0的字符不等于 _
		print('|',_,'||')

'''
基础代码:
	from time import sleep
	driver = webdriver.Chrome()
	driver.get('https://www.baidu.com')
'''

6大基础定位

下面所有定位方法都会用到如下代码:

'''
知识点:
	1.书写自动补齐的方法的时候,只写关键字即可
	2.pycharm的自动导入快捷键:alt+Enter(万能键)
	3.★如果定位到多个元素,操作的是第一个元素,所有定位方法都是如此
'''

from selenium.webdriver.common.by import By
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('r''D:\.\..\...\a.html')
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>自动化测试Web基础</title>
    </head>
    <body>
        <!--
        注释:ctrl+/
        <>内是一个元素
        定位时最好用到id
        如果没有id的时候用其他属性的组合
        id全局唯一
        定位的另一个方法:标签所处的位置,比如:在<body>标签的下面
        -->
        <div id='div1'>
            <h1>一级标题</h1>
            用户名:<input type="text" name="username" id="username" class="px vm" />
            <br />
            密码:<input type="password" name="password" id="password" class="pv" />
            <br />
            <!-- 在元素内找元素的概念 -->
            <button type="button">
                <span>登录</span>
            </button>    <!-- button:按钮 -->
        </div>
        <div id='div2'>
            <p>这是一个段落</p>
            <!--
            超链接
            link text:链接的文本
            target="_blank":控制打开一个新的网页(用在"切换窗口")
            -->
            <a href="https://www.baidu.con">百度一下,我就知道</a>
            <a href="https://cn.bing.com" target="_blank">必应</a>
        </div>
        <div id="div3">
            <!-- js 代码;切换 alert 的时候会用到 -->
            <input type="button" id="alert" value="alert" onclick="alert('helloalert')" />
            <input type="button" id="alert" value="confirm" onclick="confirm('helloconfirm')" />    <!-- 有确认 -->
            <input type="button" id="alert" value="prompt" onclick="prompt('helloprompt')" />    <!-- 用户可以输入 -->
        </div>
        <div id="div4">
            <!-- 无序列表 -->
            <ul>
                <li>1</li>
                <li>2</li>
                <li>3</li>
                <li>4</li>
            </ul>
            <!-- 有序列表 -->
            <ol>
                <li>1</li>
                <li>2</li>
                <li>3</li>
            </ol>
        </div>
        <div id="div5">
            <!--
            下拉框
            multiple='multiple' 支持多选
            -->
            <select name="salary" id="se" multiple='multiple'>
                <option value="1">10k-15k</option>
                <option value="2">15k-20k</option>
                <option value="3">20k-25k</option>
            </select>
        </div>
        <!-- 切换frame -->
        <iframe id="if" name="nf" src="https://www.baidu.com" width="800" height="600"></iframe>
    </body>
</html>
<!-- 菜鸟教程/w3c school >>学习平台 -->

tag标签定位

  • 因为太多重复,基本没用
  • head中的元素较为特殊
'''
知识点:
	1.find_element_by_* 这类方法都在4.0中弃用,代表今后可能会失效,当前仍然可用
		弃用的实现:warnings.warn('aessage',DeprecationWarning)
	2.def find_element_by_tag_name(self,name) -> WebElement:
	webelement 对象 》》按住ctrl后点击出现
	typing 内部模块的作用:
		因为python为弱类型,加了类型检查的功能,也可以对参数进行类型声明
			不做校验功能,仅做提示!(pycharm右上角的三角形)
	3.tag定位基本没用
	4.★*对于find_element方法,如果定位到多个,操作的是第一个,所有定位方法都是如此!*
	5.对 Head 中的 TITLE 标签,无法输出其文本
'''

driver.find_element_by_tag_name('p')	# 定位到了元素
# webelement >>对象

# print(driver.find_element_by_tag_name('p').text)	# 这是一个段落

# print(driver.find_element(by=By.TAG_NAME, value='p').text)

# print(driver.find_element(By.TAG_NAME, 'p').text)	# 一般我们不写参数

print(driver.find_element('tag name', 'p').text)

print(driver.find_element('tag name', 'tital').text)	# 无效

name属性定位

  • 易重复
  • 定位到多个,操作的是第一个,所有的find_element标签都是如此
'''
知识点:
	1.通过name属性的值来定位
	2.元素上的输入内容,通过send_keys输入
	3.classname 规定元素的类的名称,如需为一个元素规定多个类,用空格分隔类名
		class="px vm" 表示的是class1的值是px,class2的值是vm
		如果对多值class属性用定位,只能写一个值。其实用某种方法也可以写多个值
'''

# print(driver.find_element(By.NAME,'username').text)
# 没有text时,这是一个输入框,输入内容
driver.find_element(By.NAME,'username').send_keys('username')	# 通过元素找元素


driver.find_element(By.CLASS_NAME,"pv").send_keys('password')	# 正常。根据class和他的值定位元素
# driver.find_element(By.CLASS_NAME,"px vm").send_keys('username')	# 报错!!!无法定位到这个元素,方法是css selector(???),值是.px vm(???)。

id属性定位

'''
知识点:
	1.id的属性的值是唯一的
	2.id的属性的值可能会变
	3.id的属性的值是数字开头的
	4.send_keys 追加输入,不会清空原来内容
	5.如果要清空,在元素上操作clear
'''

# 定位到id属性的值为"username\password"的元素,并输入"user\pass"
driver.find_element('id','username').send_keys('user')
# driver.find_element('id','password').send_keys('pass')
ele_password = driver.find_element('id','password')
ele_password.send_keys('pass')

sleep(3)	# 睡眠3秒
ele_element.clear()	# 清空内容

link_text定位、partial_link_text定位

'''
知识点:
	1.<a href="https://www.qq.com">腾讯QQ</a>
		其link_texy是:腾讯QQ
		其partial_link_text是:“腾”“腾讯”“QQ”,只要是其中一部分即可
	2.LINK_TEXT 和 PARTIAL_LINK_TEXT只针对 a 标签生效,其他的如 p 标签都无法操作
		a 标签 >>超链接 anchor 锚
'''

# 只可以针对<a></a>标签定位
print(driver.find_element(By.LINK_TEXT,'腾讯QQ').text)
print(driver.find_element(By.PARTIAL_LINK_TEXT,'QQ').text)
print(driver.find_element(By.PARTIAL_LINK_TEXT,'腾讯').text)

XPATH定位

1.XPath 是一门在XML文档中查找信息的语言
2.XPath 可用来在XML文档中对元素和属性进行遍历
3.XPath 使用路径表达式在XML文档中进行导航
4.XPath 包含一个标准函数库
5.XPath 是XSLT中的主要元素
6.XPath 是一个W3C标准

前面6大基础定位用的是 id/class/name
xpath 可以替换前面的所有方法,而且可以利用其它任何属性来定位
xpath 是万能的
xpath 是慢的,因为要加载整个模块(css 相对快的)

路径定位

  • 绝对路径 /
  • 相对路径 //
  • 下标 [] 的含义
  • 下标中的函数 last() position()
  • 特殊符号 . 和 …
  • //* 所有标签
'''
知识点:
	1.绝对路径 /
		/
		盘符
		html: /html/body/div/p 
			/html 为html中的根目录
		1.1 绝对路径很少使用。因为这个路径往往非常长,如果某个中间节点发生改变,会导致整个表达式失效
		1.2 ★练习:用绝对路径定位论坛的用户名,输入admin
		
	2.相对路径 //
		//* 所有的标签
			//p 所有的 p 标签
		当定位到多个标签的时候,可以使用 回车键 进行选择
		2.1 通过下标选择,但是要注意第一个元素的下标为 [1],而不是 [0],跟列表要注意区分
			//a[2]	每个父节点下的第二个 a 标签
		
		3.拓展:
			3.1 下标 [] 的含义
			3.2 下标中的函数 last() position()
				last() 最后一个
				position() 根据所在位置
				
		4.特殊符号 . 和 ..
			. 当前路径
			.. 父目录
				//body/div[1]/.. 用在儿子比较好认,父亲没有明显特征的情况

	3.浏览器的定位技巧 ★★★★★
		3.1 F12打开开发者工具
		3.2 选择一个元素
		3.3 CTRL+F ===>find by string,xpath,css selector
			string 为干扰项(css语法回合string语法冲突)
		3.4 输入xpath表达式(如/html/body/div/p)
			观察界面,定位到的元素会泛黄显示,右侧会有 1 of N 的字样,尽量做到 1 of 1
'''

print(driver.find_element(By.XPATH,'/html/body/div/p').text)

属性

'''
知识点:
	1.语法
		1.1 //* 因为是所有标签,所以常配合 id 使用。建议使用标签名
			示例://*[@id='username']
		1.2 //标签名[@属性名='属性值']
			示例://input[@name='username']
		1.3 class 属性如果是多值,在xpath 的属性法中都要写上
			示例://*[@class='px vm']
	
	2.属性法的引号要和xpath 的引号注意区别,不要一样
	3.前面6大基础定位用的是 id/class/name
		xpath 可以替换前面的所有方法,而且可以利用其它任何属性来定位
		xpath 是万能的
	4.xpath 是慢的,因为要加载整个模块(css 相对快的)
'''

driver.find_element('xpath',"//*[@class='px vm']").send_keys('admin')

函数

  • starts-with(@属性名,属性开头的值)
  • contains(@属性名,属性包含的值)
  • text()=‘文本的值’
  • 组合 contains(text(),‘文本包含的值’)
'''
知识点:
	1.语法:
		starts-with(@属性名,属性开头的值)
		contains(@属性名,属性包含的值)
		text()='文本的值'
		组合 contains(text(),'文本包含的值')
		
	2.浏览器的定位技巧★★★★★
		2.1 inspector 点击左上角的箭头
		2.2 点击元素 elements中能定位到HTML 源码
		(也可以右键元素,点击检查直接定位过来,在自动化打开的浏览器中可能会失效)
		---
		2.3 初学者一定要保证能先在浏览器中定位到1 of 1 ,再把你的表达式放到代码中
		3.点击元素webelement.click()
		4.报错的提示是css selector???
		5.★★★★★
			元素定位的过程不能省略
			不要100% 相信定位到的内容,有可能会出现问题
			分析网页的过程
'''

driver.find_element('xpath',"//button[@class='pn vm']").click()
driver.find_element('id','username_Lczmy').send_keys('admin')	# 当id 的值user_? 后面的这部分会发生变化时,会报错。报错的提示是css selector???

逻辑运算符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Selenium是一个用于自动化浏览器操作的工具。它可以通过编写脚本来模拟用户在浏览器中的行为,例如点击、输入文本等操作。根据提供的代码示例和引用,我可以给出以下关于Selenium详解Selenium提供了四个主要的操作:导航、元素定位元素操作和获取属性。导航操作可以使浏览器跳转到指定的URL,如示例中的driver.get("http://www.baidu.com")。元素定位操作可以通过不同的定位方式(如ID、链接文本)来找到页面中的元素,如示例中的driver.find_element(By.ID,"kw")和driver.find_element(By.LINK_TEXT,"新闻")。元素操作可以对定位到的元素进行点击、输入文本等操作,如示例中的dir.click()和dir.send_keys("测试")。获取属性操作可以获取元素的属性值,如示例中的dir.get_attribute("id")。 此外,Selenium还提供了切换操作,可以切换到新窗口、iframe等页面元素上进行操作。示例中的browser.switch_to.frame方法就是切换到iframe。 总结起来,Selenium通过编写脚本基于HTTP请求,发送各种不同指令给浏览器驱动服务,然后由驱动服务来操作对应的浏览器。它可以帮助开发人员自动化测试或进行网页爬取等操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [selenium框架解析](https://blog.csdn.net/Van_CLB/article/details/129099521)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [selenium用法详解](https://blog.csdn.net/gbz2000/article/details/104426437)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值