浏览器常用方法
设置浏览器驱动
// 导包
from selenium import webdriver
//Chrome浏览器
driver = webdriver.Chrome()
//Firefox浏览器
driver = webdriver.Firefox()
//Ie浏览器
driver = webdriver.Ie()
最大化浏览器
//最大化浏览器
driver.maximize_window()
打开url
// 打开百度
driver.get("https://www.baidu.com/")
设置浏览器窗口大小(了解即可)
// 设置浏览器窗口大小:宽1500、高800(像素点)
driver.set_window_size(1500, 800)
设置浏览器窗口位置(了解即可)
// 设置浏览器窗口位置:x=500,y=300
driver.set_window_position(500, 300)
浏览器前进按钮
// 调用浏览器前进按钮
driver.forward()
浏览器后退按钮
// 调用浏览器后退按钮
driver.back()
浏览器刷新按钮
// 调用浏览器刷新按钮
driver.refresh()
获取页面title(网站页签内容)
// 获取title
driver.title
获取当前页面url
// 获取url
driver.current_url
关闭当前主窗口(了解即可)
// 关闭当前主窗口
driver.close()
关闭所有驱动对象启动的窗口
// 关闭所有驱动对象启动的窗口
driver.quit()
元素等待
隐式等待
// 全局元素等待最大时长为30秒
driver.implicitly_wait(30)
显示等待
// 导包
from selenium.webdriver.support.wait import WebDriverWait
//driver:浏览器驱动对象
//timeout:等待最大时长,单位:秒
//poll_frequency:检测间隔时间,如果不写参数,则默认为0.5秒
//find_element_by_xpath("//*[@id='kw']"):使用xpath定位方式
//其他参数不需要修改,照搬就行
WebDriverWait(driver,
timeout=30,
poll_frequency=0.6).until(lambda x: x.find_element_by_xpath("//*[@id='kw']"))
显示等待与隐式等待的区别
1.隐式等待针对全局元素有效
2.显示等待针对单个元素有效
元素定位
id定位
//基于元素属性定位
//driver.find_element_by_id('定位元素')
driver.find_element_by_id('kw')
name定位
//基于元素属性定位
//driver.find_element_by_name('定位元素')
driver.find_element_by_name('wd')
class_name定位
//基于元素属性定位
//driver.find_element_by_class_name('定位元素')
driver.find_element_by_class_name('s_ipt')
tag_name定位(了解即可)
//基于标签名称来定位:如input标签。
//注意:如果页面中存在多个相同的标签,默认返回第一个标签元素。
//案例:百度新闻("http://news.baidu.com/")定位输入框,也就是第一个input标签,输入"新闻"
//driver.find_element_by_tag_name('定位元素')
driver.find_element_by_tag_name('input').sendkes("新闻")
link_text定位
//定位超链接标签
//driver.find_element_by_link_text('定位元素')
//注意:只能用于文本内容精准匹配(例如:a标签的全部文本内容)
driver.find_element_by_link_text('新闻')
partial_link_text定位
//定位超链接标签
//driver.find_element_by_partial_link_text('定位元素')
//注意:可以用于精准或模糊匹配,如果使用模糊匹配最好能使用可以唯一关键字;如果有多个值,默认返回第一个值。
driver.find_element_by_partial_link_text('新闻')
xpath定位(重点)
在xpath中属性必须使用@修饰
//driver.find_element_by_xpath("定位元素")
//元素属性为XXX:driver.find_element_by_xpath("//*[@属性='XXX']")
//元素属性1为XXX,属性2为YYY:driver.find_element_by_xpath("//*[@属性1='XXX' and @属性2='YYY']]")
driver.find_element_by_xpath("//*[@id='kw']")
driver.find_element_by_xpath("//*[@id='kw' and @name='ww']")
//元素属性中包含XXX:driver.find_element_by_xpath("//*[contains(@属性,'XXX')]")
driver.find_element_by_xpath("//*[contains(@id,'ww')]")
//text中包含XXX:driver.find_element_by_xpath("//div[contains(text(),'XXX')]")
driver.find_element_by_xpath("//div[contains(text(),'新闻')]")
text中包含XXX的第7个元素:driver.find_element_by_xpath("(//div[contains(text(),'XXX')])[7]")
driver.find_element_by_xpath("(//div[contains(text(),'新闻')])[7]")
//同级哥哥元素:driver.find_element_by_xpath("//div[@class='value']/preceding-sibling::标签名")
driver.find_element_by_xpath("//div[@class='value']/preceding-sibling::input")
//同级弟弟元素:driver.find_element_by_xpath("//div[@class='value']/following-sibling::标签名")
driver.find_element_by_xpath("//div[@class='value']/following-sibling::input")
//元素属性以XXX开头的元素:driver.find_element_by_xpath("//*[starts-with(@属性,'XXX')]")
driver.find_element_by_xpath("//*[starts-with(@name,'k')]")
//元素属性以XXX结尾的元素:driver.find_element_by_xpath("//*[ends-with(@属性,'XXX')]")
driver.find_element_by_xpath("//*[ends-with(@name,'w')]")
//文本内容是XXX的元素:driver.find_element_by_xpath("//a[text()="XXX"]")
//注意:一般适合p标签和a标签
driver.find_element_by_xpath("//a[text()="新闻"]")
路径
绝对路径:以单斜杠(/)开头
相对路径:以双斜杠(//)开头,双斜杠后一定要跟标签或*
路径结合层级
以双斜杠开头使用单斜杠区分子集
driver.find_element_by_xpath("//*[@id='value']/input")
driver.find_element_by_xpath("//div[@id='value']/input")
注意:要灵活使用路径结合xpath、层级来进行定位,将会无往而不利!
css定位
//id选择器:#后面跟id属性的value值(页面中只有一个id属性的值为kw)
driver.find_element_by_css_selector('#kw').send_keys("python")
//如果页面中有多个id属性的值为kw,我需要定位第七个元素
element = driver.find_elements_by_css_selector('#kw')
element[7].send_keys("python")
//class选择器:.后面跟class属性的value值(页面中只有一个class属性的值为.s_ipt)
driver.find_element_by_css_selector('.s_ipt').send_keys("python")
//如果页面中有多个class属性的值为.s_ipt,我需要定位第七个元素
element = driver.find_elements_by_css_selector('.s_ipt')
element[7].send_keys("python")
//元素选择器:元素标签,如:input标签
//如果页面中只有一个input标签
driver.find_element_by_css_selector('input').send_keys("python")
//如果页面中有多个input标签,我需要定位第七个input
element = driver.find_elements_by_css_selector('input')
element[7].send_keys("python")
//元素的属性选择器:如该元素的id属性为kw(页面中只有该元素的id属性为kw)
driver.find_element_by_css_selector('[id="kw"]').send_keys("python")
//如果页面中id属性为kw的元素有多个,我需要定位第七个元素
element = driver.find_elements_by_css_selector('[id="kw"]')
element[7].send_keys("python")
//该元素的id属性为kw,name为wd
driver.find_element_by_css_selector('[id="kw"][name="wd"]').send_keys("python")
//层级选择器:大于号(>)和空格( )
//区别:>必须为子集,空格只要是下属就可以
//例如:input标签为p标签的子集
driver.find_element_by_css_selector('p>input').send_keys("python")
//例如:input标签为p标签的下属
driver.find_element_by_css_selector('p input').send_keys("python")
//元素属性值模糊匹配
//input标签的id属性以k字母开头的元素
driver.find_element_by_css_selector('input[id^="k"]').send_keys("python")
//input标签的id属性以w字母结尾的元素
driver.find_element_by_css_selector('input[id$="w"]').send_keys("python")
//input标签的id属性包含k字母的元素
driver.find_element_by_css_selector('input[id*="k"]').send_keys("python")
//组合
//层级+元素+id+class选择器
driver.find_element_by_css_selector('span>input#kw.s_ipt').send_keys("python")
//层级+元素+id+class+属性选择器
driver.find_element_by_css_selector('span>input#kw.s_ipt[name="wd"]').send_keys("python")
注意:要灵活使用css定位!!!
元素操作方法
send_keys()
//发送文本内容(输入内容):send_keys("输入内容")
driver.find_element_by_xpath("//div[@id='value']/input").send_keys("输入内容")
//上传文件:send_keys("文件路径及文件名")
//只适用于input标签
driver.find_element_by_xpath('//input[@id="file"]').send_keys("E://demo.docx")
//键盘按键及快捷键会在下方介绍
点击操作-click()
//点击操作(模拟鼠标左击)
driver.find_element_by_xpath("//button[@id='value']").click()
清空操作-clear
//清空文本框
driver.find_element_by_xpath("//div[@id='value']/input").clear
获取元素大小-size(了解即可)
//获取元素大小(宽、高)
size = driver.find_element_by_xpath('//input[@value="百度一下"]').size
print(size)
获取文本-text
//获取元素的文本信息
text = driver.find_element_by_xpath('//p[@class="login-error"]').text
print(text)
获取元素的某个属性的值-get_attribute()(了解即可)
//获取元素的某个属性的值
value = driver.find_element_by_xpath('//input[@value="百度一下"]').get_attribute("type")
print(value)
元素是否显示-is_displayed()
//判断该元素是否显示
//意思就是,html代码里面有这个元素,有的元素不在该页面上显示
//例如:百度首页的登录,点击后进入扫码登录,点击用户名登录,跳转到用户名密码登录页面,
//用户名登录按钮消失,但实际上这个元素还在html中,只是在用户名密码登录页面中不显示而已
displayed = driver.find_element_by_xpath('//p[@title="用户名登录"]').is_displayed()
print(displayed)
元素是否可用-is_enabled()
//判断元素是否可用
//例如:是否可点击,是否可编辑等等
enabled = driver.find_element_by_xpath('//input[@value="百度一下"]').is_enabled()
print(enabled)
元素是否选中-is_selected()
//判断元素是否被选中
//例如:多选框,判断该选项是否被选中;注册页面,判断用户协议前面的小方框是否被选中
selected = driver.find_element_by_xpath('//input[@type="checkbox"]').is_selected()
print(selected)
鼠标操作
右击-context_click()
//导包
from selenium.webdriver import ActionChains
//实例化ActionChains()类
action = ActionChains(driver)
//鼠标右击:action.context_click(定位元素)
//perform():执行所有 ActionChains 中存储的行为,可以理解为是对整个操作的提交动作。
action.context_click(driver.find_element_by_xpath('//input[@id="kw"]')).perform()
//扩展:右击-->粘贴(注意:此方法只适合火狐和IE,谷歌不支持)
//选中元素点击右键,选择右键菜单选项(例如粘贴(p))
action.context_click(定位的元素).send_keys('p')
双击-double_click()
//导包
from selenium.webdriver import ActionChains
//实例化ActionChains()类
action = ActionChains(driver)
//定位元素
element = driver.find_element_by_xpath('//span[contains(text(),"换一换")]')
//双击
action.double_click(element).perform()
拖拽-drag_and_drop()
//导包
from selenium.webdriver import ActionChains
//实例化ActionChains()类
action = ActionChains(driver)
//源元素定位
start_element = driver.find_element_by_xpath('//div[contains(text(),"百度热榜")]')
//目标元素定位
end_element = driver.find_element_by_xpath('//input[@id="kw"]')
//把源元素拖拽到目标元素
action.drag_and_drop(start_element, end_element).perform()
拖拽(坐标偏移量)-drag_and_drop_by_offset()
//导包
from selenium.webdriver import ActionChains
//实例化ActionChains()类
action = ActionChains(driver)
//源元素定位
start_element = driver.find_element_by_xpath('//div[contains(text(),"百度热榜")]')
//X坐标:X坐标为正数向右偏移,X坐标为负数向左偏移
X = 200
//Y坐标:Y坐标为正数向下偏移,Y坐标为负数向上偏移
Y = 500
//把源元素向右拖拽200,向下拖拽500
action.drag_and_drop_by_offset(start_element, X, Y).perform()
悬停-action.move_to_element()
//导包
from selenium.webdriver import ActionChains
//实例化ActionChains()类
action = ActionChains(driver)
//源元素定位
element = driver.find_element_by_xpath('//span[contains(text(),"设置")]')
action.move_to_element(element).perform()
注意:调用以上鼠标操作方法最后必须调用perform()!!!
键盘操作
单键
//导包
from selenium.webdriver.common.keys import Keys
//定位元素
element = driver.find_element_by_xpath('//input[@id="kw"]')
//输入python
element.send_keys("python")
//调用BACKSPACE键(键盘=号右边的那个键)
element.send_keys(Keys.BACKSPACE)
//输出结果为pytho
组合键
//导包
from selenium.webdriver.common.keys import Keys
//定位元素
element = driver.find_element_by_xpath('//input[@id="kw"]')
//输入python
element.send_keys("python")
//双键组合:调用CONTROL+a键(ctrl+a键,全选)
element.send_keys(Keys.CONTROL, 'a')
//输出结果为选中python
//三键组合:ctrl+shift+i
element.send_keys(Keys.CONTROL, Keys.SHIFT, 'i')
本次分享就到这里啦!喜欢的朋友点个关注!非常感谢!