Selenium的基本api
1、打开浏览器的驱动,以chrome为例
from selenium import webdriver #chrome驱动 driver = webdriver.Chrome(executable_path="c:\\chromedriver") driver.get('http://www.baidu.com') driver.find_element_by_id("kw") #返回一个页面元素 driver.find_element_by_id("kw").send_keys("光荣之路")
2、浏览器最大化,前进和后退
>>> driver.maximize_window() #浏览器窗口最大化 >>> driver.back() #浏览器后退 >>> driver.forward() #浏览器前进
3、强制刷新
>>> driver.refresh() #强制刷新页面
4、控制浏览器的位置:把浏览器放到固定的位置
>>> driver.set_window_position(y=200, x=400) >>> position = driver.get_window_position() >>> position {'x': 400, 'y': 200}
5、设置窗口大小
>>> driver.set_window_size(width = 200, height = 400, windowHandle='current') >>> driver.get_window_size() {'width': 516, 'height': 400}
6、获取title,判断在哪个页面
>>> driver.get("http://iciba.com") >>> driver.title '在线翻译_在线词典_金山词霸_爱词霸英语'
7、获取源码
>>> driver.get("http://iciba.com") >>> driver.page_source[:50] '<!DOCTYPE html><html xmlns="http://www.w3.org/1999'
8、断言源码中的关键字
>>> assert "英语" in driver.page_source #源码中存在 >>> assert "英语1" in driver.page_source #源码中不存在 Traceback (most recent call last): File "<stdin>", line 1, in <module> AssertionError
9、获取当前url
>>> driver.current_url
10、句柄操作
# 获取当前窗口句柄
now_handle = driver.current_window_handle
# 获取所有窗口句柄
all_handles = self.driver.window_handles
# 切换窗口
self.driver.switch_to.window(handle)
拿到句柄就像找到了窗口。
切换句柄代码举例:
#encoding=utf-8 import unittest import time import chardet from selenium import webdriver class VisitSogouByIE(unittest.TestCase): def setUp(self): # 启动chrome浏览器 self.driver = webdriver.Chrome() def test_operateWindowHandle(self): url = "http://www.baidu.com" self.driver.get(url) # 获取当前窗口句柄 now_handle = self.driver.current_window_handle # 打印当前获取的窗口句柄 print (now_handle) # 百度搜索输入框中输入“selenium” self.driver.find_element_by_id("kw").send_keys("w3cschool") # 点击搜索按钮 self.driver.find_element_by_id("su").click() # 导入time包 import time # 等待3秒,以便网页加载完成 time.sleep(3) # 点击w3school在线教育链接 self.driver.find_element_by_xpath("//*[@id='2']/h3/a").click() time.sleep(5) # 获取所有窗口句柄 all_handles = self.driver.window_handles print(all_handles) # 循环遍历所有窗口句柄 for handle in all_handles: self.driver.switch_to.window(handle) #判断源码的关键字 print('*'*50) print(self.driver.current_url) print('*'*50) if "百度热榜" in self.driver.page_source: time.sleep(5) self.driver.find_element_by_xpath("//*[@id='5']/h3/a").click() time.sleep(5) self.driver.close() elif "培训和测试" in self.driver.page_source: time.sleep(5) self.driver.find_element_by_xpath('//*[@id="course"]/ul/li[5]/a').click() time.sleep(5) def tearDown(self): # 退出IE浏览器 self.driver.quit() if __name__ == '__main__': unittest.main()
11、获取页面元素的基本信息
driver.get("https://www.baidu.com") newsElement = driver.find_element_by_xpath("//*[text()='新闻']") print (u"元素的标签名:", newsElement.tag_name) #元素的标签名: a print (u"元素的size:", newsElement.size) #元素的size: {'height': 23, 'width': 26} print(u"元素的文本:",newsElement.text) #元素的文本: 新闻 print(u"元素的链接:",newsElement.get_attribute("href")) #元素的链接: http://news.baidu.com/
12、判断页面元素是否显示
driver.get(url) div1 = driver.find_element_by_id("div1") print (div1.is_displayed()) #判断是否见
13、判断元素是否可操作
driver.get(url)
input1 = self.driver.find_element_by_id("input1")
print (input1.is_enabled())
14、页面元素的属性
driver.get(url) # 找到搜索输入框元素 searchBox = driver.find_element_by_id("query") # 获取搜索输入框页面元素的name属性值 print (searchBox.get_attribute("name")) # 向搜索输入框中输入“测试工程师指定的输入内容”内容 searchBox.send_keys(u"测试工程师指定的输入内容") # 获取页面搜索框的value属性值(即搜索输入框的文字内容) print (searchBox.get_attribute("value"))
15、获取css属性值
driver.get(url) searchBox = driver.find_element_by_id("kw") searchBox.value_of_css_property("height") searchBox.value_of_css_property("width") searchBox.value_of_css_property("font-family")
16、清空输入框
driver.get(url) input = driver.find_element_by_id("kw") input.send_keys(u"测试开发招聘") input.clear() #清空输入框
17、单击元素
driver.get(url) button = driver.find_element_by_id("button") button.click() #模拟鼠标左键单击操作
18、双击元素
from selenium.webdriver import ActionChains driver.get(url) inputBox = driver.find_element_by_id("inputBox") action_chains = ActionChains(driver) action_chains.double_click(inputBox).perform() #固定用法
19、操作下拉框
方法1:
driver.get(url) # 使用name属性找到页面上name属性为“fruit”的下拉列表元素 select = self.driver.find_element_by_name("fruit") all_options = select.find_elements_by_tag_name("option") for option in all_options: if option.text =="猕猴桃": option.click()
方法2:
driver.get(url) # 导入Select模块 from selenium.webdriver.support.ui import Select # 使用xpath定位方式获取select页面元素对象 select_element = Select(driver.find_element_by_xpath("//select")) # 方法一:通过序号选择第二个元素,序号从0开始 select_element.select_by_index(1) # 方法二:通过选项的显示文本选择文本为“猕猴桃”选项 select_element.select_by_visible_text("猕猴桃") # 方法三:通过选项的value属性值选择value=“shanzha”选项 select_element.select_by_value("shanzha")
20、断言
继承unittest.TestCase,使用 assertListEqual()
21、操作多选框
driver.get(url) # 导入Select模块 from selenium.webdriver.support.ui import Select # 使用xpath定位方式获取select页面元素对象 select_element = Select(driver.find_element_by_xpath("//select")) #选中 # 通过序号选择第一个元素 select_element.select_by_index(0) # 通过选项的文本选择“山楂”选项 select_element.select_by_visible_text("山楂") # 通过选项的value属性值选择value=“mihoutao”的选项 select_element.select_by_value("mihoutao") #取消选中 # 通过选项文本取消已选中的文本为“荔枝”选项 select_element.deselect_by_visible_text("荔枝") # 通过序号取消已选中的序号为1的选项 select_element.deselect_by_index(1) # 通过选项的value属性值取消已选中的value=“juzi”的选项 select_element.deselect_by_value("juzi")
22、操作单选框
driver.get(url) # 使用xpath定位获取value属性值为'berry'的input元素对象,也就是“草莓”选项 berryRadio = driver.find_element_by_xpath("//input[@value='berry']") # 点击选择“草莓”选项 berryRadio.click() # 断言“草莓”复选框被成功选中 assertTrue(berryRadio.is_selected(), u"草莓复选框未被选中!")
23、操作复选框:同上
24、截图
driver.get_screenshot_as_file(filename)
25、拖拽元素
initialPosition = driver.find_element_by_id("draggable") targetPosition = driver.find_element_by_id("draggable2") from selenium.webdriver import ActionChains action_chains = ActionChains(driver) # 将页面上第一个能被拖拽的元素拖拽到第二个元素位置 action_chains.drag_and_drop(initialPosition, targetPosition).perform()
26、键盘操作
#encoding=utf-8 import unittest import time import chardet from selenium import webdriver class VisitSogouByIE(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() def test_simulateASingleKeys(self): url = "http://www.baidu.com" self.driver.get(url) # 导入模拟按键模块Keys from selenium.webdriver.common.keys import Keys # 输入框输入内容 self.driver.find_element_by_id("kw").send_keys("seleniumm") time.sleep(5)
#通过WebDriver实例发送一个F12键 self.driver.find_element_by_id("kw").send_keys(Keys.F12) time.sleep(5)
# 删除多输入的一个 m self.driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE) time.sleep(10) # 输入空格键+“教程” self.driver.find_element_by_id("kw").send_keys(Keys.SPACE) self.driver.find_element_by_id("kw").send_keys("教程") time.sleep(10) # ctrl+a 全选输入框内容 self.driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'a') time.sleep(10) # ctrl+x 剪切输入框内容 self.driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'x') time.sleep(10) # ctrl+v 粘贴内容到输入框 self.driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'v') time.sleep(10) # 通过回车键来代替单击操作 self.driver.find_element_by_id("su").send_keys(Keys.ENTER) time.sleep(10) def tearDown(self): self.driver.quit() if __name__ == '__main__': unittest.main()
27、鼠标右键
#鼠标右键 #encoding=utf-8 import unittest import time from selenium import webdriver from selenium.webdriver import ActionChains import win32clipboard as w import win32con # 设置剪切板内容 def setText(aString): w.OpenClipboard() w.EmptyClipboard() w.SetClipboardData(win32con.CF_UNICODETEXT, aString) w.CloseClipboard() class VisitSogouByIE(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() def test_rigthClickMouse(self): url = "http://www.sogou.com" # 访问搜狗首页 self.driver.get(url) # 找到搜索输入框 searchBox = self.driver.find_element_by_id("query") # 将焦点切换到搜索输入框 searchBox.click() time.sleep(2) # 在搜索输入框上执行一个鼠标右键点击操作 ActionChains(self.driver).context_click(searchBox).perform() # 将“gloryroad”数据设置到剪切板中,相当于执行了复制操作 setText(u'gloryroad') time.sleep(4) # 发送一个粘贴命令,字符p指代粘贴操作 ActionChains(self.driver).send_keys('P').perform() # 点击搜索按钮 self.driver.find_element_by_id('stb').click() time.sleep(10) def tearDown(self): # 退出IE浏览器 self.driver.quit() if __name__ == '__main__': unittest.main()
28、模拟鼠标左键和释放
from selenium.webdriver import ActionChains driver.get(url) div = driver.find_element_by_id("div1") # 在id属性值为“div1”的元素上执行按下鼠标左键,并保持 ActionChains(driver).click_and_hold(div).perform() # 在id属性值为“div1”的元素上释放一直释放的鼠标左键 ActionChains(driver).release(div).perform()
29、鼠标悬浮
from selenium.webdriver import ActionChains driver.get(url) # 找到页面上的链接元素 link = driver.find_element_by_partial_link_text(u"指过来") # 找到页面上的p元素 p = driver.find_element_by_xpath("//p") # 将鼠标悬浮到第一个链接元素上 ActionChains(driver).move_to_element(link).perform() # 将鼠标从第一个链接元素移动到p元素上 ActionChains(driver).move_to_element(p).perform()
30、判断页面元素是否存在
driver.find_element(by, value) # 判断页面元素id属性值为“query”的页面元素是否存在 driver.find_element("id", "query")
driver.find_element("xpath", "//input[@id='query']")
31、设置隐式等待
driver.implicitly_wait(10)
32、设置显式等待
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions driver = webdriver.Chrome() driver.get("http://www.sogou.com") input_box=driver.find_element_by_id("query") #等待10s,每200毫秒重试一次 wait = WebDriverWait(driver, 10, 0.2) # 每200ms判断一次是否元素可见 wait.until(expected_conditions.visibility_of(input_box))
33、切入切出frame
#1 使用索引方式进入指定的frame页面,索引号从0开始。 driver.switch_to.frame(0) #2 通过标签名找到页面中所有的frame元素,然后通过索引进入该frame driver.switch_to.frame(driver.find_elements_by_tag_name("frame")[1]) #3 通过id进入frame driver.switch_to.frame(driver.find_element_by_id("rightframe"))
#4 退出frame
driver.switch_to.default_content()
33、指定页面的加载时间
driver.set_page_load_timeout(4)
34、操作alert框
# 获取alert对象 alert = driver.switch_to.alert # 使用alert.text属性获取alert框中的内容,并断言文字内容 assertAlmostEqual(alert.text, u"这是一个 alert 弹出框") # 调用alert对象的accept()方法,模拟鼠标单击alert弹窗上的“确定”按钮,以便关闭alert窗 alert.accept() # 取消按钮,模拟单击confirm框上的“取消”按钮 alert.dismiss()
35、获取cookie
#得到当前页面下所有的Cookies driver.get_cookies() #根据Cookie的name值获取该条Cookie信息 driver.get_cookie("SUV") # 删除cookie有2种方法 # 第一种:通过Cookie的name属性,删除name值为“ABTEST”的Cookie信息 driver.delete_cookie("ABTEST") # 第二种:一次性删除全部Cookie信息 driver.delete_all_cookies() # 添加自定义Cookie信息 driver.add_cookie({"name": "gloryroadTrain", 'value': '1479697159269020'})
36、键盘的上下左右操作
driver.get("http://baidu.com") 搜索:element=driver.find_element_by_name("wd") 导入Keys: from selenium.webdriver.common.keys import Keys 回车:element.send_keys(Keys.ENTER) 清理:element.clear() 上:element.send_keys(Keys.ARROW_UP) 下:element.send_keys(Keys.ARROW_DOWN) 左:element.send_keys(Keys.ARROW_LEFT) 右:element.send_keys(Keys.ARROW_RIGHT)