• 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()       # 退出程序
  • 相关阅读:
    关于爬虫中常见的两个网页解析工具的分析 —— lxml / xpath 与 bs4 / BeautifulSoup
    纯手工打造简单分布式爬虫(Python)
    原创python:windows解决genymotion appium adb 的问题。
    安装appium桌面版和命令行版
    Appium+Python 自动化appium常用元素定位方法
    python selenium 对浏览器标签页进行关闭和切换
    安装scrapy框架出错的解决
    PyCharm的基本快捷键和配置简介
    python正则表达式详解
    Python多进程库multiprocessing中进程池Pool类的使用
  • 原文地址:https://www.cnblogs.com/huafan/p/10018372.html
Copyright © 2020-2023  润新知