1.浏览器
1.1 浏览器窗口大小位置
driver.set_window_size(self, width, height, windowHandle) 将某个窗口设置为固定大小
driver.set_window_position(self, x, y, windowHandle) 将某个窗口移动到指定的位置
driver.set_window_rect(self, x, y, width, height, windowHandle) 将某个窗口设置为固定的大小移动到指定的位置
driver.maximize_window() 窗口最大化
driver.minimize_window() 窗口最小化
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
driver.set_window_size(480, 800)
driver.set_window_rect(300, 300, 480, 800)
driver.set_window_position(300, 300)
driver.maximize_window()
driver.minimize_window()
1.2 控制浏览器的后退、前进
driver.back()
driver.forward()
import time
driver = webdriver.Firefox()
f_url = "https://www.baidu.com"
s_url = "https://news.baidu.com"
driver.get(f_url)
time.sleep(1)
driver.get(s_url)
time.sleep(1)
driver.back()
assert f_url in driver.current_url, "current url not first url"
print(driver.current_url)
time.sleep(1)
driver.forward()
assert s_url in driver.current_url, "current url not second url"
print(driver.current_url)
driver.close()
1.3 模拟浏览器刷新
driver.refresh()
2.元素操作
clear 清除文本
send_keys(value) 模拟按键输入
click() 单击
submit() 提交表单,如搜索框输入内容后的回车操作,就可以通过submit()方法模拟
size 返回元素的尺寸
text 获取元素的文本
get_attribute(name) 获得属性值
is_displayed() 返回该元素是否可见,布尔类型
import time
driver = webdriver.Firefox()
f_url = "https://www.baidu.com"
driver.get(f_url)
driver.find_element_by_id("kw").send_keys("hello")
print(driver.find_element_by_id("cp").text)
driver.find_element_by_id("kw").clear()
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("kw").submit()
print(size)
print(driver.find_element_by_id("kw").get_attribute("name"))
print(driver.find_element_by_id("kw").is_displayed())
driver.close()
3.鼠标事件
perform() 执行所有ActionChains中存储的行为
context_click() 右击
double_click() 双击
drag_and_drop() 拖动
move_to_element() 鼠标悬停
右击没有实现
from selenium.webdriver.common.action_chains import ActionChains
import time
driver = webdriver.Firefox()
f_url = "https://www.baidu.com"
driver.get(f_url)
driver.find_element_by_link_text("地图").click()
driver.find_element_by_xpath("//span[@class='success']").click()
nowPos = driver.find_element_by_xpath("//*[@class="normal"][1]")
ActionChains(driver).context_click(nowPos).perform()
time.sleep(1)
try:
driver.find_element_by_xpath("//span[@id="cmitem_start"]").click()
except Exception as e:
print("not found")
time.sleep(1)
driver.close()
鼠标悬停
from selenium.webdriver.common.action_chains import ActionChains
import time
driver = webdriver.Firefox()
f_url = "https://www.baidu.com"
driver.get(f_url)
bdMore = driver.find_element_by_link_text("设置")
ActionChains(driver).move_to_element(bdMore).perform()
driver.find_element_by_link_text("搜索历史").click()
time.sleep(2)
driver.close()
鼠标双击
没有找到适用的场景,没有尝试
ActionChains(driver).double_click(element).perform()
鼠标拖放
没有找到适用的场景,没有尝试
e2 = driver.find_element_by_xpath("") #目标位置
ActionChains(driver).drag_and_drop(e1, e2).perform() #执行拖放
4.键盘事件
sendkeys可以模拟键盘输入,也可以用来模拟键盘上的按键,甚至是组合键
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep,ctime
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
el = driver.find_element(By.ID, "kw")
el.send_keys("seleniumm")
el.send_keys(Keys.BACK_SPACE)
el.send_keys(Keys.SPACE)
el.send_keys("教程")
el.send_keys(Keys.CONTROL, 'a')
el.send_keys(Keys.CONTROL, 'x')
el.send_keys(Keys.CONTROL, 'v')
el.send_keys(Keys.ENTER)
driver.close()
send_keys(Keys.BACK_SPACE) 删除键BackSpace
send_keys(Keys.SPACE) 空格键Space
send_keys(Keys.TAB) 制表键Tab
send_keys(Keys.ESPACE) 回退键Esc
send_keys(Keys.ENTER) 回车键Enter
send_keys(Keys.CONTROL,’a’) 全选Ctrl+A
send_keys(Keys.CONTROL,’c’) 复制CTRL+C
send_keys(Keys.CONTROL,’x’) 剪切CTRL+X
send_keys(Keys.CONTROL,’v’) 粘贴Ctrl+V
send_keys(Keys.F1) 键盘F1
send_keys(Keys.F12) 键盘F12
问题:如果遇到以下错误,是没有导入Keys导致的
from selenium.webdriver.common.keys import Keys
5.获得验证信息
title 获取页面标题
current_url 当前的URL
text 获取标签对之间的文本信息
driver.get("https://www.baidu.com")
print(driver.title)
print(driver.current_url)
driver.close()
6.设置等待
6.1 显式等待
显示等待使web driver等待某个条件成立时继续执行,否则跑出超时异常TimeoutException。WebDriverWait类是WebDriver提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到就抛出异常。
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
driver:浏览器驱动
timeout:最长超时时间,默认以秒为单位
poll_frequency:检测的间隔时间,默认0.5秒
ignored_exceptions:超时后的异常信息,默认抛NoSuchElementException异常
WebDriverWait一般由until()或until_not()方法配合使用
until(method, message=”) 调用该方法提供的驱动程序作为一个参数,直到返回值为true
until_not(method, message=”) 调用该方法提供的驱动程序作为一个参数,直到返回值为false
from selenium.webdriver.common.by import By
from time import sleep,ctime
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC #将expected_condtions重命名为EC
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
el = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "kw")))#将EC方法作为参数传入
el.send_keys('selenium')
driver.close()
expected_conditions类提供的预期条件判断方法:
title_is 判断当前页面的标题是否等于预期
title_contains 判断当前页面的标题是否包含预期字符串
presence_of_element_located 判断元素是否被加在DOM树里,并不代表该元素一定可见
visibility_of_element_located 判断元素可见(元素非隐藏,且元素宽和高都不等于0)
visibility_of 与上一个方法相同,只是上一个方法参数为定位;该方法接收的参数为定位后的元素
presenece_of_all_elements_located 判断是否至少有一个元素存在于DOM树中。例如,在百度首页有n个元素的class为mnav,那么只要有一个存在,就返回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
invisibility_of_element_located 判断某个元素是否不存在与DOM树或不可见
invisibility_to_be_clickable 判断元素是否可见且可以点击
staleness_of 等到一个元素从DOM树中移除
element_to_be_selected 判断某个元素是否被选中,一般用在下拉列表
element_selection_state_to_be 判断某个元素的选中状态是否符合预期
element_located_selection_state_to_be 与上一个方法作用相同,只是上一个方法参数为定位后的元素,该方法接收的参数为定位
alert_is_present 判断页面上是否存在alert
6.2 隐式等待
隐式等待是通过一定的时长等待页面上某元素加载完成。如果超出了设置的时长元素还没有被加载,则抛出NoSuchElementException异常。Web Driver提供了implictly_wait()方法来实现隐式等待,默认设置为0.
implicitly_wait(seconds)
from time import ctime
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.implicitly_wait(10) #设置隐式等待时间为10秒
try:
print(ctime())
driver.find_element_by_id("kw22").send_keys("selenium")
except Exception as e:
print(e)
finally:
print(ctime())
driver.close()
6.3 休眠 time.sleep(seconds)