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接口常用方法
submit() #提交表单
元素.size #返回元素尺寸
元素.text #获取元素文本
元素.get_attribute(name) #获取name属性值 如:.get_attribute(‘type’)
元素.is_displayed #返回该元素是否用户可见(可见:True)
1.3 鼠标事件
鼠标操作的方法封装在ActionChains类。
引入ActionChains:
from selenium.webdriver.common.action_chains import ActionChains
perform() 执行所有ActionChains中存储的行为
context_click() 右击
double_click() 双击
move_to_element() 鼠标悬停
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
以上示例:
# 003:浏览器大小、拖动滚动条、全屏、获取浏览器titile、url、 # coding=utf-8 from selenium import webdriver from time import * driver = webdriver.Chrome() driver.get("http://www.baidu.com/") driver.maximize_window() #设置浏览器全屏显示 sleep(1) driver.find_element_by_id("kw").send_keys("selenium2") driver.find_element_by_id("su").click() driver.set_window_size(480,800) #设置浏览器大小为移动端样式 sleep(1) # 通过javascript设置浏览器窗口的滚动条 注:window.scrollTo(水平滚动条的距离,垂直滚动条的距离) js = "window.scrollTo(100,450);" driver.execute_script(js) sleep(1) print(driver.title) print(driver.current_url) driver.find_element_by_id("kw").clear() driver.find_element_by_id("kw").send_keys("pycharm") driver.find_element_by_id("su").submit() sleep(1) driver.back() #浏览器后退 sleep(1) driver.forward() #浏览器后退 sleep(1) driver.quit()
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
# 004:WebDriverWait使用 # coding=utf-8 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("http://www.baidu.com/") e = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, 'kw'))) e.send_keys('JLL')
1.6.1.1 expected_conditions
expected_conditions类提供的预期条件判断的方法
title_is 判断当前页面的标题是否等于预期
title_contains 判断当前页面标题是否包含预期字符串
presence_of_element_located 判断元素是否被加在DOM树里,并不代表该元素一定可见
visbility_of_element_located 判断元素是否可见(可见代表元素非隐藏,并且元素的宽和高都不等于0)
visbility_of 与上一个方法作用相同,只是接收参数不同。上一个接收参数是定位,这一个参数是定位后的元素
presence_of_all_elements_located 判断是否至少有一个元素存在于DOM树中。只要有1个就返回True
text_to_be_present_in_element 判断某个元素中的text是否包含了预期的字符串
text_to_be_present_in_element_value 判断某个元素的value属性是否包含了预期的字符串
frame_to_be_available_and_switch_to_it 判断该表单是否可以切换进去,如果可以,返回True并且switch进去,否则返回False
invisbility_of_element_located 判断某个元素是否不存在于DOM树或不可见
element_to_be_clickable() 判断某个元素是否可见并且是可以点击的
staleness_of 等到一个元素从DOM树中移除,判断一个元素是否仍在DOM,可判断页面是否已经刷新
element_to_be_selected 判断某个元素是否被选中,一般用在下拉列表
element_selection_state_to_be 判断某个元素的选中状态是否符合预期,传入元素对象以及状态,相等返回True,否则返回False
element_located_selection_state_to_be 与上一个方法作用相同,只是上一个方法参数是定位后的元素,该方法接收的参数是定位
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
# is_displayed:and try:……except # coding=utf-8 from selenium import webdriver from time import sleep, ctime driver = webdriver.Chrome() driver.get("http://news.baidu.com/") for i in range(10): try: el = driver.find_element_by_id('s_btn_wr2') if el.is_displayed(): break except: pass sleep(1) else: print('time out') driver.close()
1.6.2 隐式等待
通过设定的时长等待页面元素加载完成。如果超过设定时间还未加载完成,抛出NoSuchElementException。webdriver提供了implicitly_wait()方法来实现隐式等待,默认设置为0.
# 006:隐式等待 and NoSuchElementException # coding=utf-8 from selenium import webdriver from selenium.common.exceptions import NoSuchElementException from time import ctime driver = webdriver.Chrome() driver.implicitly_wait(5) #设置隐式等待5秒 driver.get("http://news.baidu.com/") try: print(ctime()) driver.find_element_by_id("ww2").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秒