1.1.1 浏览器窗口大小set_windows_size()
# coding=utf-8
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://news.baidu.com/")
driver.set_window_size(480,800) #设置浏览器大小为移动端样式
driver.maximize_window() #设置浏览器全屏显示
1.1.2 浏览器前进、后退
driver.back()
driver.forward()
1.1.3 浏览器刷新
driver.refresh()
1.2 简单元素操作
clear() #清空
send_keys(“value”) #输入值
click() #点击 (按钮、图片、复选框、单选框、下拉框等)
1.2.1 WebElement接口常用方法
u submit() #提交表单
u 元素.size #返回元素尺寸
u 元素.text #获取元素文本
u 元素.get_attribute(name) #获取name属性值 如:.get_attribute(‘type’)
u 元素.is_displayed #返回该元素是否用户可见(可见:True)
1.3 鼠标事件
鼠标操作的方法封装在ActionChains类。
引入ActionChains:
from selenium.webdriver.common.action_chains import ActionChains
u perform() 执行所有ActionChains中存储的行为
u context_click() 右击
u double_click() 双击
u move_to_element() 鼠标悬停
u drag_and_drop() 拖动
例如:
元素a = driver.find_element_by_id(‘xx’)
元素b = driver.find_element_by_id(‘ww’)
1.3.1 右击a
ActionChains(driver).context_click(a).perform()
1.3.2 双击a
ActionChains(driver). double_click(a).perform()
1.3.3 悬停a
ActionChains(driver). move_to_element(a).perform()
1.3.4 拖动a至b
ActionChains(driver). drag_and_drop(a,b).perform()
1.4 键盘事件
#引入键盘事件
from selenium.webdriver.common.keys import keys
常见操作:
Send_keys(keys.BACK_SPACE) 删除键
send_keys(Keys.SPACE) 空格键
send_keys(Keys.TAB) 制表键
send_keys(Keys.ESPACE) 回退键
send_keys(Keys.ENTER) 回车键
send_keys(Keys.CONTROL,'a') 全选
send_keys(Keys.CONTROL,'c') 复制
send_keys(Keys.CONTROL,'x') 剪切
send_keys(Keys.CONTROL,'v') 粘贴
send_keys(Keys.F1) F1
1.5 获得验证信息
获得title、url、或text进行验证。
- driver.title
- driver.current_url
- 元素.text
1.6 设置元素等待
1.6.1 显示等待
webdriver等待某个条件成立时继续执行,否则在达到最大时长的时候抛出TimeoutException。
# 引入元素等待方法
from selenium.webdriver.support.ui import WebDriverWait
WebDriverWait类由webdriver提供的等待方法,在设置的时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超出设置的时间为检测出元素,则抛出异常。语法如下:
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
- driver:浏览器驱动
- timeout:超时时间,单位为秒
- poll_frequency:检测的间隔时间,默认为0.5s
- ignored_exceptions:超时后抛得异常,默认情况下抛NoSuchElementException.
WebDriverWait()一般由until()或until_not()配合使用。
² until(method,massage’’):调用该方法提供的驱动程序作为一个参数,直至返回值为True
² until_not(method,massage’’):调用该方法提供的驱动程序作为一个参数,直至返回值为False
1.6.1.1 expected_conditions
expected_conditions类提供的预期条件判断的方法
u title_is 判断当前页面的标题是否等于预期
u title_contains 判断当前页面标题是否包含预期字符串
u presence_of_element_located 判断元素是否被加在DOM树里,并不代表该元素一定可见
u visbility_of_element_located 判断元素是否可见(可见代表元素非隐藏,并且元素的宽和高都不等于0)
u visbility_of 与上一个方法作用相同,只是接收参数不同。上一个接收参数是定位,这一个参数是定位后的元素
u presence_of_all_elements_located 判断是否至少有一个元素存在于DOM树中。只要有1个就返回True
u text_to_be_present_in_element 判断某个元素中的text是否包含了预期的字符串
u text_to_be_present_in_element_value 判断某个元素的value属性是否包含了预期的字符串
u frame_to_be_available_and_switch_to_it 判断该表单是否可以切换进去,如果可以,返回True并且switch进去,否则返回False
u invisbility_of_element_located 判断某个元素是否不存在于DOM树或不可见
u element_to_be_clickable() 判断某个元素是否可见并且是可以点击的
u staleness_of 等到一个元素从DOM树中移除,判断一个元素是否仍在DOM,可判断页面是否已经刷新
u element_to_be_selected 判断某个元素是否被选中,一般用在下拉列表
u element_selection_state_to_be 判断某个元素的选中状态是否符合预期,传入元素对象以及状态,相等返回True,否则返回False
u element_located_selection_state_to_be 与上一个方法作用相同,只是上一个方法参数是定位后的元素,该方法接收的参数是定位
u alert_is_present 判断页面上是否存在alert
例如:
Ele = WebDriverWait(driver, 5,0.5).until(EC. presence_of_element_located(By.ID,’wk’))
1.6.1.2 is_displayed
for i in range(10):
try:
el = driver.find_element_by_id("s_btn_wr")
if el.is_displayed():
break
except:pass
sleep(1)
else:
print('time out')
1.6.2 隐式等待
通过设定的时长等待页面元素加载完成。如果超过设定时间还未加载完成,抛出NoSuchElementException。webdriver提供了implicitly_wait()方法来实现隐式等待,默认设置为0.
# coding=utf-8
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import ctime
driver = webdriver.Chrome()
driver.implicitly_wait(10) #等待10秒
driver.get("http://news.baidu.com/")
try:
print(ctime())
driver.find_element_by_id("ww").send_keys("selenium2")
except NoSuchElementException as e:
print(e)
finally:
print(ctime())
driver.quit()
1.6.3 sleep休眠
# 引入sleep()方法
from time import sleep
sleep(2) 固定休眠2秒