1、元素操作
2、浏览器操作
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Edge()
driver.get(r'https://www.baidu.com/?tn=85070231_1_hao_pg')
driver.set_window_size(1000,1000) #设置浏览器窗口大小 -->设置浏览器宽、高(像素点)
driver.set_window_position(300,300) #设置浏览器窗口位置-->设置浏览器位置
driver.maximize_window() #最大化浏览器窗口-->模拟浏览器最大化按钮
driver.find_element(By.XPATH,'//*[@id="s-top-left"]/a[1]').click()
#要注意此处的页面跳转是新打开一个网页 还是当前页面跳转 如果是新开了一个网页 name前进后退操作无法执行
sleep(3)
driver.back() #后退-->模拟浏览器后退按钮
sleep(3)
#前进必须放在后退之后执行
driver.forward() #前进 -->模拟浏览器前进按钮
sleep(3)
driver.refresh() #刷新 -->模拟浏览器F5刷新
print(driver.title) #获取页面title 是属性不是方法 driver.title()写法错误
print(driver.current_url) #获取当前页面URL 是属性不是方法
sleep(3)
driver.close() #关闭当前窗口 -->模拟点击浏览器关闭按钮
sleep(3)
driver.quit() #关闭浏览器驱动对象-->关闭所有程序启动的窗口
3、获取元素信息
# 获取元素信息
# size 返回元素大小
# text 获取元素的文本
# get_attribute("xxx") 获取属性值,传递的参数为元素的属性名
# is_displayed() 判断元素是否可见
# is_enabled() 判断元素是否可用
# is_selected() 判断元素是否选中,用来检查复选框或单选按钮是否被选中
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Edge()
driver.get(r'https://www.selenium.dev/selenium/web/web-form.html')
elementA=driver.find_element(By.XPATH,'//*[@id="my-text-id"]')
elementB=driver.find_element(By.XPATH,'/html/body/main/div/form/div/div[2]/div[3]/label')
elementB.click() #选中复选框
print('元素大小',elementA.size)
print('元素文本',elementA.text)
print('元素属性的名称',elementA.get_attribute('name'))
print('元素是否可见',elementA.is_displayed())
print('元素是否可用',elementA.is_enabled())
print('复选框是否被选中',elementB.is_selected())
sleep(3)
driver.close()
4、鼠标操作
from time import sleep
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
driver = webdriver.Edge()
driver.get(r'https://www.baidu.com/?tn=85070231_1_hao_pg')
elementA=driver.find_element(By.XPATH,'//*[@id="bottom_layer"]/div/p[1]/a')
elementB=driver.find_element(By.XPATH,'//*[@id="kw"]')
#实例化并获取Aactionchains类
actions = ActionChains(driver) #ctrl+alt+空格自动导包
#悬停
actions.move_to_element(elementA).perform()
sleep(2)
#右键点击
actions.context_click(elementA).perform()
sleep(2)
#双击
actions.double_click(elementA).perform()
sleep(2)
#拖拽
actions.drag_and_drop(elementA,elementB).perform()
sleep(3)
driver.close()
5、键盘操作
5.1、Keys类
seleniu中吧键盘的按键都封装在Keys类中
导包 from selenium.webdriver.common.keys import Keys
5.2、常用的键盘操作
5.3、代码演示
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
driver = webdriver.Edge()
driver.get(r'https://www.selenium.dev/selenium/web/web-form.html')
elementA=driver.find_element(By.XPATH,'//*[@id="my-text-id"]')
elementB=driver.find_element(By.XPATH,'/html/body/main/div/form/div/div[1]/label[3]/textarea')
elementA.send_keys('hahahhahah')
elementA.send_keys(Keys.CONTROL, "a") #ctrl+a全选
sleep(3)
elementA.send_keys(Keys.CONTROL, "c") #ctrl+c复制
sleep(3)
elementB.send_keys(Keys.CONTROL, "v")
sleep(3)
elementB.send_keys(Keys.CONTROL, "a")
sleep(3)
elementB.send_keys(Keys.BACK_SPACE) #删除键
sleep(3)
driver.close()
5.4、提示
1.选中代码中的Keys使用ctrl+B可查看底层 底层中包含每个键的编码
2、应用
组合键:element.send_keys(Keys.XXX,'a') #XXX+a
单键:element.send_keys(Keys.XXX) #XXX
selenium中为什么鼠标类需要创建实例化对象 Keys类不需要创建对象?
6、元素等待
1、为什么要设置元素等待
由于电脑配置或网络原因,在查找元素时,元素代码未在第一时间内被加载出来,而抛出未找到元素异常。
2、 什么是元素等待
在第一次未找到时,元素等待设置的时长被激活,如果在设置的有效时长内找到元素,继续执行代码,如果超出设置的时长未找到元素,抛出未找到元素异常。
元素等待分类: 隐式等待 显式等待
6.1、隐式等待
方法: driver.implicitlywait(30) #一般情况下设置30秒
特色:针对所有元素生效。
一般情况下为前置必写代码(1.获取浏览器驱动对象:2.最大化浏览器:3.设置隐式等待)
6.2、显式等待
概念:定位指定元素时,如果能定位到元素则直接返回该元素,不触发等待;如果不能定位到该元素,则间隔一段时间后再去定位元素:如果在达到最大时长时还没有找到指定元素,则抛出超
时异常 TimeoutException 。
在Selenium中把显式等待的相关方法封装在WebDriverWait类中
显示等待实现代码:
6.3、显式等待与隐式等待区别
1、显示等待:针对单个元素生效
2、隐式等待:针对全局元素生效