上篇文章介绍了selenium环境搭建,搭建好之后就可以开始写代码了
基础脚本,打开一个网址
from selenium import webdriver
driver = webdriver.Chrome()#打开chrome浏览器
driver.get('https://www.baidu.com') #打开百度
打开本地HTML文件
上篇文章我自己写了一个html文件,放在了当前路径下
第一种方式
通过绝对路径打开
from selenium import webdriver
driver = webdriver.Chrome()#打开chrome浏览器
driver.get(r'D:\sele_study\2-selenium\day1_sele\test.html')
第二种方式
通过相对路径打开
本质上也是通过方法把相对路径转为绝对路径
#第一种转为绝对路径的方法
from selenium import webdriver
from pathlib import Path#pathlib:路径处理库
driver = webdriver.Chrome()#打开chrome浏览器
html = Path('./test.html')
driver.get(str(html.resolve()))#Path.resolve:该方法将一些的 路径/路径段 解析为绝对路径
#第二种转为绝对路径的方法
from selenium import webdriver
import os
html = os.path.abspath('./test.html')#返回绝对路径
driver = webdriver.Chrome()
driver.get(html)
优雅地打开浏览器(with)
用with打开浏览器,不用手工关闭
from selenium import webdriver
from time import sleep
with webdriver.Chrome() as driver:#with上下文管理器,不需要我去关闭
driver.get('https://www.baidu.com')#打开百度
sleep(5)#等5秒,自动关闭
#祖宗方法
find_element
#通过class属性的值定位(底层是css)
find_element_by_class_name
#√√√通过css 选择器定位(推荐,最快)
find_element_by_css_selector
#√通过id的值定位(底层是css)
find_element_by_id
#√通过a标签的文本定位(底层是XPATH)
find_element_by_link_text
#通过name属性的值来定位(底层是css)
find_element_by_name
#通过a标签的部分文本定位(模糊匹配)(底层是XPATH)
find_element_by_partial_link_text
#通过标签名来定位(底层是css)
find_element_by_tag_name
#√√通过xpath方法定位(慢)
find_element_by_xpath
#以下方法的用法同上,只是返回的是一组元素(列表形式)
find_elements
find_elements_by_class_name
find_elements_by_css_selector
find_elements_by_id
find_elements_by_link_text
find_elements_by_name
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_xpath
除了祖宗方法,其他八种定位方式被大家称为‘selenium八大元素定位’
可以配合HTML全局属性介绍来理解这些方法。
HTML全局属性介绍:https://www.w3school.com.cn/tags/html_ref_standardattributes.asp
用法示例
以下方法演示用的是我们上篇文章写的HTML文件
需要的朋友可以去上篇文章复制或公众号后台输入‘html练习’获取源文件
find_element_by_name
通过name属性的值来定位
from selenium import webdriver
from pathlib import Path
from time import sleep
with webdriver.Chrome() as driver:#打开chrome浏览器
html = Path('./test.html')
driver.get(str(html.resolve()))#Path.resolve:该方法将一些的 路径/路径段 解析为绝对路径
driver.find_element_by_name('username').send_keys('admin')
#找到name的值为'username'的标签,并输入'admin'
sleep(5)#5秒后关闭
知识点:
1.如果遇到重复的元素,操作的永远是第一个
2.send_keys方法,不会清空原来的内容
find_element_by_id
通过id的值定位
from selenium import webdriver
import os
from time import sleep
with webdriver.Chrome() as driver:
html = os.path.abspath('./test.html')#获取绝对路径
driver.get(html)
driver.find_element_by_id('username').send_keys('admin')
#找到id的值为'username'的标签,并输入'admin'
sleep(5)
知识点:
1.id是唯一的
2.可能会变,需要注意识别
3.首字符是数字的要注意css的表达式(后续详细介绍)
find_element_by_class_name
通过class属性的值定位
from selenium import webdriver
import os
from time import sleep
with webdriver.Chrome() as driver:
html = os.path.abspath('./test.html')#获取绝对路径
driver.get(html)
# 1. 输入用户名
driver.find_element_by_class_name('aa').send_keys('admin')
#找到class的值为'aa'的标签,并输入'admin'
# 2. 输入密码
# driver.find_element_by_class_name('bb cc').send_keys('123456')--错误写法
driver.find_element_by_class_name('bb').send_keys('pass')
#找到class的值为'bb'的标签,输入'pass'
driver.find_element_by_class_name('cc').send_keys('word')
#找到class的值为'cc'的标签,输入'word'
sleep(5)
知识点:
1.class也容易重复
2.class ='bb cc'规定元素的一个或多个类名,等同于class1,class2='bb','cc'
所以不能直接用driver.find_element_by_class_name('bb cc')
find_element_by_link_text
通过a标签的全文本定位,需要文本完全匹配
from selenium import webdriver
import os
from time import sleep
with webdriver.Chrome() as driver:
html = os.path.abspath('./test.html')#获取绝对路径
driver.get(html)
driver.find_element_by_link_text('百度一下,你就不知道').click()
#找到文本为'百度一下,你就不知道'文本的a标签,并点击
sleep(5)#等待5秒关闭
find_element_by_partial_link_text
通过a标签的部分文本定位(模糊匹配)
#方法二:模糊匹配
from selenium import webdriver
import os
from time import sleep
with webdriver.Chrome() as driver:
html = os.path.abspath('./test.html')#获取绝对路径
driver.get(html)
driver.find_element_by_partial_link_text('必应').click()
#找到包含'必应'文本的a标签,并点击
sleep(5)#等待5秒关闭
知识点:
1.link_text 的两种定位方式只适用于a标签的文本
2.link_text 完全匹配
3.parti_link_text 部分(模糊)可以是开头是、包含、结尾是
4.click()点击
find_element_by_tag_name
通过标签名来定位,因为重复特别多,所以很少用,不做介绍。
find_element_by_css_selector
通过css 选择器定位(推荐,最快)
内容比较多且重要,之后单独文章做介绍。
find_element_by_xpath
通过xpath方法定位
内容比较多且重要,之后单独文章做介绍。
扫码关注公众号‘自动化测试研习社’
一起变强