基本语法(基于python语言)
from selenium import webdriver 导入工具包
driver = webdriver.Chrome 启动浏览器
driver.get(" https://www.baidu.cm/ ") 打开百度
driver.set_window_size(800,300) 设定特定大小
driver.maximize_window() 最大化
driver.get_screenshot_as_file 截图
time.sleep() 等待时间
driver.refesh() 刷新
采用class进行定位,且当class 相同时,利用索引值【1】以及在element+s 进行定位
下面为同学总结复习参考
模块 | 语法 | 释义 | 实例 |
导入工具包 | from selenium import webdriver | 从selenium中导入webdriver工具包 | from selenium import webdriver |
浏览器相关 | webdriver.Chrome() | 需要将控制的webdriver的Firefox赋值给浏览器对象;获得了浏览器对象才可以启动浏览器 | browser = webdriver.Chrome() |
.get("http://www.baidu.com") | 通过 get()方法,可以向浏览器发送网址 | browser.get("www.baidu.com") | |
.quit() | 退出并关闭窗口的每一个相关的驱动程序 | browser.quit() | |
.maximize_window() | 将浏览器最大化显示 | browser.maximize_window() | |
.set_window_size(480, 800) | 设置浏览器宽480、高800显示 | browser.set_window_size(480, 800) | |
.back() | 浏览器的返回(后退)功能 | browser.back() | |
.forward() | 浏览器的前进功能 | browser.forward() | |
.size | 返回元素的尺寸 | size=driver.find_element_by_id("kw").size | |
.text | 获取元素的文本 | text=driver.find_element_by_id("cp").text | |
.get_attribute('type') | 获得属性值 | attribute=driver.find_element_by_id("kw").get_attribute('type') | |
.is_displayed() | 设置该元素是否用户可见 | result=driver.find_element_by_id("kw").is_displayed() | |
.get_screenshot_as_file() | 截浏览器窗体 | driver.get_screenshot_as_file('./pic/append.png') #有弹窗alert不能截图 | |
鼠标事件 | .clear() | 清除元素的内容,如果可以的话 | browser.find_element_by_id("user_name").clear() |
.send_keys() | 在元素上模拟按键输入 | browser.find_element_by_id("user_name").send_keys("username") | |
.click() | 单击元素 | browser.find_element_by_id("dl_an_submit").click() | |
.submit() | 提交表单 | browser.find_element_by_id("dl_an_submit").submit() | |
ActionChains 类鼠标操作的常用方法:from selenium.webdriver.common.action_chains import ActionChains | |||
context_click() | 右击 | ActionChains(driver).context_click("xxx").perform() | |
double_click() | 双击 | ActionChains(driver).double_click("xxx").perform() | |
drag_and_drop(source, target) | 在源元素上按下鼠标左键,然后移动到目标元素上释放。 source: 鼠标按下的源元素。 target: 鼠标释放的目标元素。 | ActionChains(driver).drag_and_drop(element, target).perform() | |
move_to_element() | 鼠标悬停在一个元素上 | ActionChains(driver).move_to_element("xxx").perform() | |
click_and_hold() | 按下鼠标左键在一个元素上 | ActionChains(driver).click_and_hold("xxx").perform() | |
perform() | ActionChains 用于生成用户的行为;所有的行为都存储在 actionchains 对象。通过 perform()执行 存储的行为。 | ||
元素定位 | find_element_by_id() | 通过id查找元素 | browser.find_element_by_id("xxx") |
find_element_by_name() | 通过name查找元素 | browser.find_element_by_name("xxx") | |
find_element_by_class_name() | 通过class查找元素 | browser.find_element_by_class_name("xxx") | |
find_element_by_tag_name() | 通过tag查找元素 | browser.find_element_by_tag_name("xxx") | |
find_element_by_link_text() | 适用于文字链接的定位(整个文字) | browser.find_element_by_link_text("xxx") | |
find_element_by_partial_link_text() | 适用于文字链接的定位(部分文字) | browser.find_element_by_partial_link_text("xxx") | |
find_element_by_xpath() | browser.find_element_by_xpath() | ||
find_element_by_css_selector() | browser.find_element_by_css_selector() | ||
键盘事件 | webdriver 的 Keys()类提供键盘上所有按键的操作,甚至可以模拟一些组合建的 操作,如 Ctrl+A ,Ctrl+C/Ctrl+V | from selenium.webdriver.common.keys import Keys | 引入 Keys 类包 |
send_keys(Keys.BACK_SPACE) | 删除键(BackSpace) | ||
send_keys(Keys.SPACE) | 空格键(Space) | ||
send_keys(Keys.TAB) | 制表键(Tab) | ||
send_keys(Keys.ESCAPE) | 回退键(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) | ||
时间等待处理 | sleep() | 强制等待 | time.sleep(10) |
implicitly_wait() | 这个等待的时间是不固定的,最长的等待也莫过于我们设置的最大值 | driver.implicitly_wait(10) | |
WebDriverWait(driver,10,1) | 每1秒轮查一次,超时时间为10秒,超出报异常,配合until()和until_not()方法一起使用 | WebDriverWait(driver,10,1).until(methon) | |
下拉滚动条方法 | target = driver.find_element_by_id("id_keypair") driver.execute_script("arguments[0].scrollIntoView();", target) #拖动到可见的元素去 | ||
窗口切换 | driver.switch_to_window(driver.window_handles[1]) | ||
alert\confirm\prompt 弹出框操作 | .switch_to.alert | 获取alert对象 | alert = driver.switch_to.alert |
.text | 获取alert对象中的文本信息 | alert.text | |
.dismiss() | 点击取消或【X】(如果有的话) | alert.dismiss() | |
.accept() | 点击确认按钮 | alert.accept() | |
.send_keys() | 输入值,这个 alert\confirm 没有对话框就不能用了,不然会报错。 | alert.send_keys() | |
嵌套iframe | driver.switch_to.frame() | 用frame的index来定位,第一个是0 | driver.switch_to.frame(0) |
用id来定位 | driver.switch_to.frame("frame1") | ||
用name来定位 | driver.switch_to.frame("myframe") | ||
用WebElement对象来定位 | driver.switch_to.frame(driver.find_element_by_tag_name("iframe")) | ||
driver.switch_to.parent_frame() | 从子iframe切到父iframe | ||
lambda | lambda函数是匿名的 lambda函数有输入和输出 lambda x, y: x*y;函数输入是x和y,输出是它们的积x*y |
xpath |
一、xpath主要用于路径定位,定位所需要的元素的位置,从而展开操作 |
1、如果要根据绝对路径的话,则使用单斜杠(/),并且每个层级的路径要正确: <html class="w3c"> <body> <div class="page-wrap"> <div id="hd" name="q"> <form target="_self" action="http://www.so.com/s"> <span id="input-container"> <input id="input" type="text" x-webkit-speech="" autocomplete="off" |
2、如果要根据相对路径的话,则使用双斜杠(//),并且注意每一个层级是相对还是绝对: :find_element_by_xpath("//input[@id=’input’]") #通过自身的 id 属性定位 :find_element_by_xpath("//span[@id=’input-container’]/input") #通过上一级目录的id属性定位 :find_element_by_xpath("//div[@id=’hd’]/form/span/input") #通过上三级目录的 id 属性定位 :find_element_by_xpath("//div[@name=’q’]/form/span/input")#通过上三级目录的 name 属性定位 |
3、关于是否需要再路径中加入 @XXX ,视情况而定,如果要定位的同一层级的元素没有名称重复的,则不需要加@XXX;如果同一层级有元素名称重复的话,则需要添加@XXX来区分究竟是哪一个 |
4、xpath很灵活,可以在@里面做一些逻辑判断,例如://div[@id=’hd’ or @name=’q’] |
5、xpath语法: <bookstore> <book> <title lang="eng">Harry Potter</title> <price>29.99</price> </book> <book> <title lang="eng">Learning XML</title> <price>39.95</price> </book> </bookstore> 1、/ 从根节点选取 :bookstore/book 选取bookstore 的子元素的所有book 元素 // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置:bookstore//book 选择bookstore 元素的后代的所有book 元素,不管它们bookstore之下的什么位置 . 选取当前节点 .. 选取当前节点的父节点 @ 选取属性 ://@lang 选取名为 lang 的所有属性 [XXX] :/bookstore/book[1] 选取属于 bookstore 子元素的第一个 book 元素 :/bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素 :/bookstore/book[last()-1] 选取属于 bookstore 子元素的倒数第二个 book 元素 :/bookstore/book[position()<3] 选取最前面的两个属于 bookstore 元素的子元素的 book 元素 ://title[@lang='eng'] 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性 :/bookstore/book[price>35.00]/title 选取 bookstore 元素中的book元素的所有title元素且其中 的price元素的值须大于35.00 * 匹配任何元素节点 :/bookstore/* 选取 bookstore 元素的所有子元素 @* 匹配任何属性节点 ://title[@*] 选取所有带有属性的 title 元素 |