002 selenium 元素定位
''' 时间:2018/11/26 功能:unittest 目录: 一: 浏览器操作 1 打开网页 2 设置休眠 3 页面刷新 4 页面切换 5 设置窗口大小 6 截屏 7 退出 二: 八种定位 1 find_element_by_id 2 find_element_by_name 3 find_element_by_class_name 4 find_element_by_tag_name
5 find_element_by_link_text 6 find_element_by_partial_link_text 7 xpath 8 css 9 复数 三: 操作对象 1 常规操作 2 鼠标事件
(1) 单击右键
(2) 双击左键
(3) 鼠标悬停
3 键盘事件 四: Error 1 没权限
五: 未解决 '''
一: 浏览器操作
1 打开网页
# coding:utf-8 from selenium import webdriver # 导入模块 - webdriver driver = webdriver.Firefox() # 启动浏览器 - Firefox #driver = webdriver.Chrome() # 启动浏览器 - Chrome #driver = webdriver.Ie() # 启动浏览器 - Ie driver.get("https://www.baidu.com") # 访问url - 百度
2 设置休眠
# coding:utf-8 from selenium import webdriver # 导入模块 - webdriver import time # 导入模块 - time driver = webdriver.Firefox() # 启动浏览器 - Firefox driver.get("https://www.baidu.com") # 访问url - 百度 time.sleep(3) # 设置休眠 - 3秒钟 driver.quit() # 退出浏览器
3 页面刷新
# coding:utf-8 from selenium import webdriver # 导入模块 - webdriver import time # 导入模块 - time driver = webdriver.Firefox() # 启动浏览器 - Firefox driver.get("https://www.baidu.com") # 访问url - 百度 time.sleep(3) # 设置休眠 - 3秒钟 driver.refresh() # 刷新页面 driver.quit() # 退出浏览器
4 页面切换
# coding:utf-8 from selenium import webdriver # 导入模块 - webdriver import time # 导入模块 - time driver = webdriver.Firefox() # 启动浏览器 - Firefox driver.get("https://www.baidu.com") # 访问url - 百度 time.sleep(2) # 设置休眠 - 2秒钟 driver.get("https://www.cnblogs.com/huafan/") # 访问url - 博客园 time.sleep(2) # 设置休眠 - 2秒钟 driver.back() # 返回上一页 time.sleep(2) # 设置休眠 - 2秒钟 driver.forward() # 返回下一页 time.sleep(2) # 设置休眠 - 2秒钟 driver.quit() # 退出浏览器
5 设置窗口大小
# coding:utf-8 from selenium import webdriver # 导入模块 - webdriver import time # 导入模块 - time driver = webdriver.Firefox() # 启动浏览器 - Firefox driver.get("https://www.baidu.com") # 访问url - 百度 time.sleep(2) # 设置休眠 - 2秒钟 driver.set_window_size(540, 960) # 设置窗口 - 540*960 time.sleep(2) # 设置休眠 - 2秒钟 driver.maximize_window() # 设置窗口 - 最大化 time.sleep(2) # 设置休眠 - 2秒钟 driver.quit() # 退出浏览器
6 截屏
# coding:utf-8 from selenium import webdriver # 导入模块 - webdriver import time # 导入模块 - time driver = webdriver.Firefox() # 启动浏览器 - Firefox driver.get("https://www.baidu.com") # 访问url - 百度 time.sleep(2) # 设置休眠 - 2秒钟 driver.get_screenshot_as_file("C:\\test_001.jpg") # 截屏浏览器 time.sleep(2) # 设置休眠 - 2秒钟 driver.quit() # 退出浏览器
7 退出
# coding:utf-8 from selenium import webdriver # 导入模块 - webdriver import time # 导入模块 - time driver = webdriver.Firefox() # 启动浏览器 - Firefox driver.get("https://www.baidu.com") # 访问url - 百度 time.sleep(2) # 设置休眠 - 2秒钟 #driver.close() # 关闭窗口 - 当前窗口 driver.quit() # 退出进程 - 浏览器; 删除文件 - C盘临时
二: 八种定位
1 find_element_by_id
# coding:utf-8 from selenium import webdriver import time driver=webdriver.Firefox() # 启动浏览器 - Firefox driver.get("https://www.baidu.com") # 访问url - 百度 time.sleep(1) # 步骤: 定位 + 操作 + 数据 # 定位(控件) + 操作(键盘/鼠标) + 数据 driver.find_element_by_id("kw").send_keys("汁虫 博客园") # 定位 - 百度搜索框; 操作 - 键盘输入; 数据 - 汁虫 博客园 driver.find_element_by_id("su").click() # 定位 - 百度按钮; 操作 - 鼠标点击; 数据 - 无 driver.find_element_by_id("kw").clear() # 定位 - 百度搜索框; 操作 - 清除; driver.find_element_by_id("kw").send_keys("博客园 汁虫") # 定位 - 百度搜索框; 操作 - 键盘输入; 数据 - 博客园 汁虫 driver.find_element_by_id("su").click() # 定位 - 百度搜索框; 操作 - 清除; driver.quit() # 退出程序
2 find_element_by_name
# coding:utf-8 from selenium import webdriver import time driver=webdriver.Firefox() # 启动浏览器 - Firefox driver.get("https://www.baidu.com") # 访问url - 百度 time.sleep(1) # 步骤: 定位 + 操作 + 数据 driver.find_element_by_name("wd").send_keys("汁虫 博客园") # 定位 - 百度搜索框; 操作 - 键盘输入; 数据 - 汁虫 博客园 driver.find_element_by_id("su").click() # 定位 - 百度按钮; 操作 - 鼠标点击; 数据 - 无 driver.quit() # 退出程序
3 find_element_by_class_name
# coding:utf-8 from selenium import webdriver import time driver=webdriver.Firefox() # 启动浏览器 - Firefox driver.get("https://www.baidu.com") # 访问url - 百度 time.sleep(1) # 步骤: 定位 + 操作 + 数据 driver.find_element_by_class_name("s_ipt").send_keys("汁虫 博客园") # 定位 - 百度搜索框; 操作 - 键盘输入; 数据 - 汁虫 博客园 driver.find_element_by_class_name("s_btn").click() # 定位 - 百度按钮; 操作 - 鼠标点击; 数据 - 无 driver.quit() # 退出程序
4 find_element_by_tag_name
# coding:utf-8 from selenium import webdriver import time driver=webdriver.Firefox() # 启动浏览器 - Firefox driver.get("https://www.baidu.com") # 访问url - 百度 time.sleep(2) # 步骤: 定位 + 操作 + 数据 driver.find_element_by_tag_name("area").click() # 定位 - 百度图片; driver.quit() # 退出程序
5 find_element_by_link_text
# coding:utf-8 from selenium import webdriver import time driver=webdriver.Firefox() # 启动浏览器 - Firefox driver.get("https://www.baidu.com") # 访问url - 百度 time.sleep(1) # 步骤: 定位 + 操作 + 数据 driver.find_element_by_link_text("学术").click() # 定位 - 链接; 操作 - 点击; driver.quit() # 退出程序
6 find_element_by_partial_link_text
# coding:utf-8 from selenium import webdriver import time driver=webdriver.Firefox() # 启动浏览器 - Firefox driver.get("https://www.baidu.com") # 访问url - 百度 time.sleep(1) # 步骤: 定位 + 操作 + 数据 driver.find_element_by_partial_link_text("术").click() # 定位 - 链接; 操作 - 点击; driver.quit() # 退出程序
7 xpath
# coding:utf-8 from selenium import webdriver import time driver=webdriver.Firefox() # 启动浏览器 - Firefox driver.get("https://www.baidu.com") # 访问url - 百度 time.sleep(1) # 步骤: 定位 + 操作 + 数据 driver.find_element_by_xpath("/html/body/div/div/div/div/div/form/span/input").send_keys("selenium") driver.find_element_by_xpath("/html/body/div/div/div/div/div/form/span[2]/input").click() driver.quit() # 退出程序
8 css
# coding:utf-8 from selenium import webdriver import time driver = webdriver.Firefox() # 启动浏览器 - Firefox driver.get("https://www.baidu.com") # 访问url - 百度 time.sleep(1) # 步骤: 定位 + 操作 + 数据 # 定位(控件) + 操作(键盘/鼠标) + 数据 driver.find_element_by_css_selector("#kw").send_keys("汁虫 博客园") # 定位 - 百度搜索框; 操作 - 键盘输入; 数据 - 汁虫 博客园 driver.find_element_by_css_selector("#su").click() # 定位 - 百度按钮; 操作 - 鼠标点击; 数据 - 无 time.sleep(3) driver.quit() # 退出程序
9 复数
find_elements_by_id()
find_elements_by_name()
find_elements_by_class_name()
find_elements_by_tag_name()
find_elements_by_link_text()
find_elements_by_partial_link_text()
find_elements_by_xpath()
find_elements_by_css_selector()
# coding:utf-8 from selenium import webdriver import time driver=webdriver.Firefox() # 启动浏览器 - Firefox driver.get("https://www.baidu.com") # 访问url - 百度 time.sleep(1) # 步骤: 定位 + 操作 + 数据 elements = driver.find_elements_by_class_name("mnav")[5].click() driver.quit() # 退出程序
三: 操作对象
1 常规操作
1 clear() # 清除 2 send_keys() # 输入 3 click() # 点击 4 submit() # 回车
# coding:utf-8 from selenium import webdriver import time driver = webdriver.Firefox() # 启动浏览器 - Firefox driver.get("https://www.baidu.com") # 访问url - 百度 time.sleep(1) # 步骤: 定位 + 操作 + 数据 driver.find_element_by_id("kw").send_keys(u"汁虫 博客园") # 定位 - 百度搜索框; 操作 - 键盘输入; 数据 - 汁虫 博客园 driver.find_element_by_id("su").click() # 定位 - 百度按钮; 操作 - 鼠标点击; 数据 - 无 time.sleep(2) driver.find_element_by_id("kw").clear() # 定位 - 百度搜索框; 操作 - 清除; driver.find_element_by_id("kw").send_keys(u"博客园 汁虫") # 定位 - 百度搜索框; 操作 - 键盘输入; 数据 - 博客园 汁虫 driver.find_element_by_id("kw").submit() # 定位 - 百度搜索框; 操作 - 键盘输入; 数据 - 回车 time.sleep(4) driver.quit() # 退出程序
2 鼠标事件
ActionChains
click() 单击左键
context_click() 单击右键
double_click() 双击左键
move_to_element() 鼠标悬停
drag_and_drop() 鼠标拖动
(1) 单击右键
# coding:utf-8 from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains import time driver = webdriver.Firefox() # 启动浏览器 - Firefox driver.get("https://www.baidu.com") # 访问url - 百度 click = driver.find_element_by_id("kw") ActionChains(driver).context_click(click).perform() time.sleep(5) driver.quit() # 退出程序
(2) 双击左键
# coding:utf-8 from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains import time driver = webdriver.Firefox() # 启动浏览器 - Firefox driver.get("https://www.baidu.com") # 访问url - 百度 click = driver.find_element_by_link_text("学术") ActionChains(driver).double_click(click).perform() time.sleep(5) driver.quit() # 退出程序
(3) 鼠标悬停
# coding:utf-8 from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains import time driver = webdriver.Firefox() # 启动浏览器 - Firefox driver.get("https://www.baidu.com") # 访问url - 百度 time.sleep(2) mouse_setting = driver.find_element_by_link_text("设置") ActionChains(driver).move_to_element(mouse_setting).perform() time.sleep(3) driver.find_element_by_link_text("搜索设置").click() time.sleep(3) driver.quit() # 退出程序
3 键盘事件
# coding:utf-8 from selenium import webdriver from selenium.webdriver.common.keys import Keys import time driver = webdriver.Firefox() # 启动浏览器 - Firefox driver.get("https://www.baidu.com") # 访问url - 百度 time.sleep(1) # 步骤: 定位 + 操作 + 数据 driver.find_element_by_id("kw").send_keys("seleniumm") # 定位 - 百度搜索框; 操作 - 键盘输入; 数据 - 汁虫 博客园 time.sleep(3) # 数据删除: m driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE) time.sleep(2) # 添加数据: "空格键" + "教程" driver.find_element_by_id("kw").send_keys(Keys.SPACE) driver.find_element_by_id("kw").send_keys("教程") time.sleep(2) # 快捷键: ctrl + a driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'a') time.sleep(2) # 快捷键: ctrl + x driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'x') time.sleep(2) # 快捷键: ctrl + v driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'v') time.sleep(2) # 键盘: 回车 driver.find_element_by_id("kw").send_keys(Keys.ENTER) time.sleep(3) driver.quit() # 退出程序
1 : 使用键盘按钮,必须先导入keys类(from selenium.webdriver.common.keys import Keys)。
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE) # 删除 : BackSpace driver.find_element_by_id("kw").send_keys(Keys.SPACE) # 空格 : Space driver.find_element_by_id("kw").send_keys(Keys.TAB) # 制表 : Tab driver.find_element_by_id("kw").send_keys(Keys.ESCAPE) # 回退 : ESC driver.find_element_by_id("kw").send_keys(Keys.ENTER) # 回退 : Enter driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'a') # 全选 : Ctrl + a driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'c') # 复制 : Ctrl + c driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'x') # 剪切 : Ctrl + x driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'v') # 粘贴 : Ctrl + v driver.find_element_by_id("kw").send_keys(Keys.F1) # 按键 : F1 driver.find_element_by_id("kw").send_keys(Keys.F12) # 按键 : F12
1 : 常用键盘操作。
四: Error
1 没权限
# coding:utf-8 from selenium import webdriver import time driver = webdriver.Firefox() # 启动浏览器 - Firefox driver.get("https://pypi.org/") # 访问url - 百度 time.sleep(1) driver.find_element_by_xpath(".//*[@id='search']").send_keys("selenium") time.sleep(5) driver.quit() # 退出程序
selenium.common.exceptions.WebDriverException: Message: Permission denied to access property "name" Stacktrace: at b/</< (https://cdn.ravenjs.com/3.26.2/raven.min.js:2)
五: 未解决
鼠标拖拽失败
# coding:utf-8 from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains import time driver = webdriver.Firefox() # 启动浏览器 - Firefox driver.get("https://www.baidu.com") # 访问url - 百度 time.sleep(1) source = driver.find_element_by_link_text("学术") target = driver.find_element_by_id("kw").send_keys("asd") ActionChains(driver).drag_and_drop(source, target).perform() time.sleep(5) driver.quit() # 退出程序