常用元素操作API
定位到元素后,需要对元素进行操作。一般来说,所有与页面交互的操作都将通过WebElement接口。
webdriver中常用的操作元素的方法有如下几个:
from selenium.webdriver.common.by import By
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
#send_keys():在对象上模拟按键输入
driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("海贼王")
#clear():清除对象的内容
driver.find_element(By.CSS_SELECTOR,"#kw").clear()
#click():单击对象,强调对象的独立性
driver.find_element(By.NAME,"tj_trnews").click()
#submit():提交表单,要求对象必须是表单
driver.find_element(By.ID,'form').submit()
#is_displayed():用来判断对象是否可见,即css的display属性是否为none
driver.find_element(By.CSS_SELECTOR,"#id").is_displayed()
#is_enabled():判断对象是否被禁用
driver.find_element(By.CSS_SELECTOR,"#id").is_enabled()
#is_selected()判断对象是否被选中
driver.find_element(By.CSS_SELECTOR,"#id").is_selected()
#get_attribute("属性名"):获取对象的属性值
driver.find_element(By.CSS_SELECTOR,"#id").get_attribute("name")
#size:返回对象的尺寸
print(driver.find_element(By.ID,"kw").size)
#text:获取对象的文本
print(driver.find_element(By.NAME,"tj_trnews").text)
#tag_name:获取对象便签名称
print(driver.find_element(By.ID,"kw").tag_name)
#location:获取元素坐标
print(driver.find_element(By.ID,"kw").location)
鼠标事件
这些操作包含在ActionChains类中。
ActionChains类中鼠标操作常用方法:
- context_click():右击
- double_click():双击
- drag_and_drop():拖动
- move_to_element():鼠标移动到一个元素上
- click_and_hold():按下鼠标左键在一个元素上
举例:
ele=driver.find_element(By.NAME,"tj_trnews")
kw=driver.find_element(By.ID,"kw")
#左键单击,以及单击拆解
ActionChains(driver).click(ele).perform()
ActionChains(driver).click_and_hold(ele).release(ele).perform()
#左键双击
ActionChains(driver).double_click(ele).perform()
#右键单击
ActionChains(driver).context_click(kw).perform()
键盘事件
keys()类提供键盘上所有按键操作,还可以模拟组合键。
from selenium.webdriver.common.action_chains import ActionChains
#组合键操作:ctrl+c
ActionChains(driver).key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).perform()
等待操作
为了保证脚本的稳定性,有时候需要引入等待时间,等待页面加载元素后再进行操作,selenium提供三种等待时间设置方式。
1、sleep():固定休眠时间设置,python的time包里提供了休眠方式sleep,导入包后就能使用
sleep()方法以秒为单位,如果超时设置小于1秒,可以使用小数
import time
time.sleep(0.5)
其实,这个函数的真正用途不是给我们看脚本的运行过程的,有时候网络原因,或页面加载慢。假设搜索框输入了selenium,搜索按钮还没加载出来,,那么脚本就报错。
在适当位置加入time.sleep()有助于减少网络原因造成的脚本执行失败。
2、implicitlyWait():比sleep()方法智能,sleep()方法只能在一个固定的时间等待,而implicitlyWait()可以在一个时间范围内等待,称为隐式等待
driver.implicitly_Wait(100)
备注:设置等待时间100s,页面上的元素5s后出现,只等待5s。不会等待100秒
3、WebDriverWait():显示等待
语法格式如下:
WebDriverWait(driver.timeout,poll_frequency=0.5,ignore_exceptioins=None)
timeout:最长超时时间,默认以秒为单位
poll_frequency:休眠时间的间隔(步长)时间,默认为0.5秒(即每500毫秒扫描一次页面)
ignore_exceptions:超时后的异常信息,默认情况下抛NoSuchElementException异常