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()       # 退出程序
原文地址:https://www.cnblogs.com/huafan/p/10018372.html