zoukankan      html  css  js  c++  java
  • webdriver 属于selenium 体系中设计出来操作浏览器的一套API

    1.元素的定位

      1.id属性定位

         实例:   find_element_by_id("kw")

     2.name属性定位,同id一样是属性值

       实例:  find_element_by_name("wd")

     3.class属性定位

      实例:  find_element_by_class_name("s_ipt")

     4.tag标签名定位

       实例: find_element_by_tag_name("input")

     5.link文本链接定位

      实例: find_element_by_link_text("新闻")

       partial link通过标签对之间的部分文本信息来定位元素

     实例:find_element_by_partial_link_text("部分文本信息")

     6.XPath 定位

       绝对路径定位   (div[2]表示当前层级下的第二个div)

     实例:find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span[2]/input")

       利用元素属性定位,元素的任意属性都可以使用,*表示任意标签名。

     实例:find_element_by_xpath("//input[@id='kw']")

             find_element_by_xpath("//*[@type='submit']")

      层级与属性的结合,通过上一级或上几级的属性进行定位查找

     实例:find_element_by_xpath("//span[@class='bg s_ipt_wr']/input")

             find_element_by_xpath("//form[@id='form']/span[2]/input")

      使用逻辑运算符and,多个属性来查找元素。

     实例:find_element_by_xpath("//input[@id='kw' and @class='su']/span/input")

      Firebug前端调试工具 和 FirePath插件可以方面的辅助生成XPath语法

     7.css定位

       通过class属性定位,用(.)表示

      实例:find_element_by_css_selector(".s_ipt")

      通过id属性定位。用(#)表示

      实例:find_element_by_css_selector("#kw")

      通过标签名定位

      实例:find_element_by_css_selector("input")

      通过父子关系定位

      实例:find_element_by_css_selector("span>input")

      通过属性定位  title=move mouse here  或者title$=here或者title*=mouse

      实例:find_element_by_css_selector("input[title^=move]")

      组合定位

      实例;find_element_by_css_selector("form.fm>span>input#kw")

    2.控制浏览器的大小,后退,前进,刷新

    from selenium import webdriver
    driver = webdriver.Firefox()
    driver.set_window_size(480,800)          (大小)
    driver.get("https://www.baidu.com/")

    print("百度首页")
    driver.get("http://news.baidu.com/")
    print("百度新闻")

    driver.back()                                       (后退)

    driver.forward()                                   (前进)
    driver.quit()                                        (退出)

     driver.refresh()                                    (刷新)

    3.简单的元素操作

    .clear():清楚文本

    .send_keys("*value"):模拟按键输入

    .click():单击元素

    .submit():提交表单    webelement接口常用方法,远不及click()广泛

    from selenium import webdriver

    driver = webdriver.Firefox()
    driver.get("http://www.126.com/")

    driver.find_element_by_id("idInput").clear()
    driver.find_element_by_id("idInput").send_keys("username")
    driver.find_element_by_id("pwdInput").clear()
    driver.find_element_by_id("pwdInput").send_keys("password")
    driver.find_element_by_id("loginBtn").click()

    driver.quit()
     
    driver.find_element_by_id("query").submit()

     

    .size:返回元素的尺寸
    .text:获取元素的文本
    .get_attribute('name'):获取属性值
    .is_displayed():获取该元素是否用户可见
     
    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get("https://www.baidu.com/")

    size = driver.find_element_by_id('kw').size
    print(size)
    text = driver.find_element_by_id('cp').text
    print(text)
    attribute = driver.find_element_by_id('kw').get_attribute('type')
    print(attribute)
    result = driver.find_element_by_id('kw').is_displayed()
    print(result)

    driver.quit()
    4.鼠标事件

    一. 1. 引入ActionChains类才可以进行鼠标操作

      from selenium.webdriver.common.action_chains import ActionChains
         perform():对整个动作的提交动作
        context_click():右击
        double_click():双击
        drag_and_drop():拖动
        move_to_element():鼠标悬停
     2.定位到目标元素
       click = driver.find_element_by_id("XX")
     3.进行鼠标操作
       ActionChains(driver).context_click(click).perform()
       双击和悬停同右击用法一样
     二.鼠标拖放的操作 
    1. 定位到原位置
       element = driver.find_element_by_id("xx")
    2. 定位到目标位置
       target = driver.find_element_by_id("yy")
    3. 执行拖放操作
       ActionChains(driver).drag_and_drop(element,target).perform()
    5.键盘事件
      引入keys模块
    from selenium.webdriver.common.keys import Keys
     输入内容
    driver.find_element_by_id("kw").send_keys("selenium")
    删除键
    driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
    空格+“教程”
    driver.find_element_by_id("kw").send_keys(Keys.SPACE)
    driver.find_element_by_id("kw").send_keys("教程")
    全选输入框内容
    driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
    剪切输入框的内容
    driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
    粘贴内容到输入框
    driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'v')
    回车键代替单击操作
    driver.find_element_by_id("kw").send_keys(Keys.ENTER)
    send_keys(Keys.TAB): 制表键
    send_keys(Keys.ESCAPE):回退键
    send_keys(Keys.F1): 键盘F1

    6.获得验证信息 

     通常用的最多的验证信息是title.URL.text

    title:1.打印当前title和URL

             title = drive.title

                 print(title)

            now_url=driver.current_url

                 print(now_url)

          2.执行126邮箱登陆的操作

            。。。。。。。。。

          3.再次打印当前title.URL和text

            title = drive.title

                 print(title)

            now_url=driver.current_url

                 print(now_url)

           user= driver.find_element_by_id(“spnUid”).text

               print(user)
    结果:title和URL都发生了变化,text可以获取用户文本,是很好的验证信息。
    7.设置元素等待
    显示等待:引入WebDriverWait,第2,3,4行
    WebDriverWaituntil_not()同.until()或者until_not()配合使用
    presence_of_element_located:预期判断方法。之外还有很多种
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC

    driver = webdriver.Firefox()
    driver.get("https://www.baidu.com")

    element =WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,"kw")))

    element.send_keys('selenium')
    driver.quit()
     
    is_displayed():判断元素是否可见:也是预期判断的方法
    from selenium import webdriver
    from time import ctime,sleep

    driver = webdriver.Firefox()
    driver.get("https://www.baidu.com/")

    print (ctime())
    for i in range(10):
    try:
    el = driver.find_element_by_id("kw22")
    if el.is_displayed():
    break
    except:pass
    sleep(1)
    else:
    print("time out")
    driver.close()
    print(ctime())
    隐式等待:
    引入: NoSuchElementException
    from selenium import webdriver
    from selenium.common.exceptions import NoSuchElementException
    from time import ctime

    driver = webdriver.Firefox()
    driver.implicitly_wait(10)
    driver.get("https://www.baidu.com/")

    try:
    print(ctime())
    driver.find_element_by_id("kw").send_keys("selenium")
    except NoSuchElementException as e:
    print(e)
    finally:
    print(ctime())
    driver.quit()
    sleep:修眠方法
    from time import sleep
    sleep(1)
    8.定位一组元素
    1.打开本地html文件,需要用到os模块,引入os模块
    import os
    2.定位文件
    file_path = 'file:///' + os.path.abspath("checkbox.html")
    3.从所选文件中定位一组元素 
    inputs = driver.find_elements_by_tag_name("input")
    input.click()全选
    部分选取
    for i in inputs:
        if i.get_attribute('type') = = 'checkbox':
            i.click()
    打印所有的input元素的个数
    print(len()inputs)
    去掉所选元素的最后一个钩pop()   pop(0):选择第一个
    driver.find_elements_by_tag_name("input").pop().click()
    9.多表单的切换switch_to.frame():切换表单
    1,引入os模块,然后定位当前路径下的文件,找到从文件中插入表单
         import os
         file_path = 'file:///' + os.path.abspath("checkbox.html")

     2.切换到表单iframe(id=“if”),switch_to.frame():可以直接取表单的id或name属性

        如果iframe没有可用的id或name属性,可以先通过xpath定位,然后将值传给switch_to.frame()

       1.  driver.switch_to.frame("if")

       2.xf = driver.find_element_by_xpath('//*[@class="if"]')
          driver.switch_to.frame("xf")    
     3.跳出离它最近的表单switch_to.parent_content()
          driver.switch_to.parent_content()
     4.跳回最外层的页面switch_to.default_content()
          driver.switch_to.default_content()
    10.多窗口的切换
      1.打开百度首页,获得当前百度首页的句柄current_window_handle
        sreach_windows = driver.current_window_handle
      2.打开第二个窗口,注册窗口,找到登陆元素.click(),找到注册元素.click()
      3.获得所有的窗口句柄:window_handles
         all_handles = driver.window_handles
      4.for handle in all_handles:
             if handle != sreach_windows:
                 driver.switch_to_window(handle)   切换到注册窗口
            if handle = sreach_windows:
                 driver.switch_to_window(handle)   回到搜索窗口
    11.警告框处理
        使用switch_to_alert()方法定位到alert/confirm/prompt警告/确认/提示,
        然后使用text/accept/dismiss/send_keys等方法进行操作。
        text:返回alert/confirm/prompt中的文字信息
        accept():接受现有警告框
        dismiss():解散现有警告框
        send_keys(keysToSend):发送文本至警告框。keysToSend:将文本发送至警告框
    实例:接受警告框
        driver.switch_to_alert().accept()
    12.上传文件send_keys()实现上传
     1.引用os模块,找到当前路径下的html文件
        file_path = 'file:///' + os.path.abspath('upfile.html')
        driver.get(file_path)
     2.定位file_path文件中的上传按钮,添加本地文件
        driver.find_element_by_name('file').send_keys('D:\upload_file.txt')
      还可以通过autoit实现上传  (不建议使用此种方法)
    13.下载文件(只针对Firefox浏览器)不同的浏览器设置方法不同
    为了让Firefox浏览器能实现文件的下载,需要通过对FirefoxProfile()做一些设置
    1.  ("browser.download.folderList",2)
     设置成0代表下载到浏览器默认下载路径,设置成2则可以保存到制定目录。
    2.("browser.download.manager.showWhenStarting",False)
     是否显示开始;True为显示,False为不显示
    3.browser.download.dir
      用于指定所下载文件的目录。
      os.getcwd()
      不需要传递参数,用于返回当前目录
     4.browser.helperApps.neverAsk.saveToDisk
      指定要下载页面的Content-type值,HTTP Content-type常用对照表:http://tool.oschina.net/commons
       application/octet-stream
      为文件类型
    from selenium import webdriver
    import os

    fp = webdriver.FirefoxProfile()
     
    fp.set_preference("browser.download.folderList",2)
    fp.set_preference("browser.download.manager.showWhenStarting",False)
    fp.set_preference("browser.download.dir",os.getcwd())
    fp.set_preference("browser.helperApps.neverAsk.saveToDisk","application/octet-stream")
    driver = webdriver.Firefox(firefox_profile=fp)
    driver.get("http://prpi.python.org/pypi/selenium")
    driver.find_element_by_partial_link_text("selenium-2").click()
    14.操作cookie  读取,添加和 删除cookie信息
     cookie的数据是以字典的形式进行存放的
     cookie = driver.get_cookies():获得所有的cookie信息
     cookie = driver.get_cookie("name"):返回字典中key为'name'的cookie信息
     add_cookie(cookie_dict):添加cookie。“cookie_dict”指字典对象,必须有name和value值(相当于记住密码)
     delete_cookie(name,optionsString):删除cookie信息。“name”是要删除的cookie的名称,“optionsString”是
                                                       该cookie的选项。目前支持的选项包括“路径”,“域”
     delete_all_cookies():删除所有cookie信息
     实例:向cookie的Name和value中添加会话信息
             driver.add_cookie({'name':'key-aaaaa','value':'value-bbbbb'})
             for cookie in driver.get_cookies():
                 print("%s ->%s" %(cookie['name'],cookie['value']))
    15.调用javaScript来控制浏览器的滚动条 或者向页面中的text area
         文本框输入内容
     execute_Script():来执行javaScript代码
     window.scrollTo():设置浏览器窗口滚动条的水平和垂直位置,第一个表示水平的左间距,第二个表示垂直的上边距。
    实例:
    from selenium import webdriver
    from time import sleep

    driver = webdriver.Firefox()
    driver.get("https://www.baidu.com")

    driver.set_window_size(600,600)
    driver.find_element_by_id("kw").send_keys("selenium")
    driver.find_element_by_id("su").click()
    sleep(5)

    js = "window.scrollTo(100,450);"
    driver.execute_script(js)
    sleep(5)

    driver.quit()
    向页面中的text area 文本框输入内容
    1.定义要输入的内容text
    2.对文本框进行定位
    3.将text与javaScript代码通过“+”进行拼接。目的:为了使输入的内容变得可自定义
    4.通过execute_Script()执行javaScript代码
    text = “input text”
    js = "var sum=document.getElementById('id'); sum.value='" + text + "';"
    driver.execute_Script(js)
    16.处理html5的视频播放
      WebDriver支持在指定的浏览器上测试HTML5,如果使用javaScript来测试这些功能就可以在任何浏览器上测试HTML5了。
      arguments[]:包含了函数调用的参数数组,[0]表示取对象的第一个值
      currentSrc:返回音频视频的url。若果未设置音频视频,则返回空字符串
      load(),play(),pause()控制着视频的加载播放暂停
     1.打开播放器页面
     driver.get("http://videojs.com/")
     2.定位到播放文件
     video = driver.find_element_by_xpath("body/setion[1]/div/video")
     3.返回播放文件的地址
     url = driver.execute_script("return arguments[0].currentSrc;",video)
     print(url)
     4.播放视频
     driver.execute_script("return arguments[0].piay()",video)
    5.暂停视频
    driver.execute_script("arguments[0].pause",video)
    17.窗口截图
     get_screenshot_as_file:截取当前窗口
     driver.get_screenshot_as_file("D:\pyse\baidu_img.jpg")   保存的位置
    18.关闭当前窗口
    close():关闭当前窗口
    19.验证码的处理
     设置万能验证码
     引入randint()函数,用于生成随机整数
    from random import randint
     
    verify = randint(1000,9999)
    print("生成的随机数:%d",%verify)
     
    number = input("请输入随机数:")
    print(number)
    number = int(number)
     
    if number == verify:
        print("登录成功")
    elif number == 132741:
        print("登录成功")
    else:
        print("验证码输入有误")
     
    记录kookie(相当于记住密码)
     访问xx网站
    driver.get("http://www.xx.com")
     将用户名密码写入浏览器cookie
     driver.add_cookie({'name':'login_username','value':'username'})
     driver.add_cookie({'name':'login_passwd','value':'passwd'})

     再次访问xx网站,将会自动登陆

     driver.get("http://www.xx.com")

    20.webdriver的原理

     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    python基础易错题
    经典案例题2
    经典案例题1
    Http和Https的区别
    爬虫过程中需要注意的问题
    [转]项目规模估计方法介绍
    [转]23种设计模式总结
    [转]分布式session的几种实现方式
    [转]Redis哨兵模式(sentinel)学习总结及部署记录(主从复制、读写分离、主从切换)
    [转]【Linux】Linux 目录结构
  • 原文地址:https://www.cnblogs.com/wanglisong/p/6945894.html
Copyright © 2011-2022 走看看