zoukankan      html  css  js  c++  java
  • selenium库的使用

    Selenium

    Selenium是一个用于web应用测试的工具,Selenium测试直接运行在浏览器中,模拟用户操作

    安装:

    pip install selenium(win)
    

    配置:

    将下载的ChromeDriver进行解压,将解压后的文件放入合适的位置(将解压的文件放入配置了环境变量的文件夹
    

    Chrome有界面运行

    from selenium import werdriver
    import time
    driver = wedriver.Chrome()     ##创建Chrome对象
    #操作
    driver.get('https://www.baidu.com')
    time.sleep(2)
    driver.quit()   ##关闭浏览器
    

    chrome无界面运行

    rom selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    import time
    
    chrome_opt = Options()      # 创建参数设置对象.
    chrome_opt.add_argument('--headless')   # 无界面化.
    chrome_opt.add_argument('--disable-gpu')    # 配合上面的无界面化.
    chrome_opt.add_argument('--window-size=1366,768')   # 设置窗口大小, 窗口大小会有影响.
    
    # 创建Chrome对象并传入设置信息.
    driver = webdriver.Chrome(chrome_options=chrome_opt)        
    # 操作这个对象.
    driver.get('https://www.baidu.com')     # get方式访问百度.
    time.sleep(2)
    print(driver.page_source)       # 打印加载的page code, 证明(prove) program is right.
    driver.quit()   # 使用完, 记得关闭浏览器, 不然chromedriver.exe进程为一直在内存中.
    

    Selenium Driver操作

    • get(url) :在当前浏览器会话中访问传入的url地址
    • close():关闭浏览器当前窗口
    • quit():退出webdriver并关闭所有窗口
    • refresh():刷新当前页面
    • title:获取当前页的标题
    • page_source:获取当前页渲染后的源代码
    • current_url:获取当前页面的url
    • window_handles:获取当前会话中所有窗口的句柄

    Driver查找单个元素

    • find_element_by_xpath():通过xpath查找

    • find_element_by_class_name():通过class属性查找

    • find_element_by_css_selector():通过css选择器查找

    • find_element_by_id():通过id查找

    • find_element_by_name():通过name属性进行查找

    • find_element_by_partial_link_text():通过链接文本的部分匹配查找

    • find_element_by_tag_name():通过标签名查找

      查找返回的是一个webelement对象

      查找多个元素:将其中的element加上一个s,则是对应的多个查找方法

    Driver获取截屏

    • get_screenshot_as_base64():获取当前窗口的截图保存为一个base64编码的字符串

    • get_screenshot_as_file(filename):获取当前窗口的截图保存为一个png格式的图片,filename参数为图片的保存地址,最后应该以.png结尾

    • get_screenshot_as_png():获取当前窗口的截图保存为一个png格式的二进制字符串

    Driver获取窗口信息

    • get_window_position(windowHandle='current') :获取当前窗口的x,y坐标

    • get_window_rect():获取当前窗口的x,y坐标和当前窗口的高度和宽度

    • get_window_size(windowHandle='current'):获取当前窗口的高度和宽度

    Driver切换操作

    • switch_to_frame(frame_reference):将焦点切换到指定的子框架中
    • switch_to_window(window_name):切换窗口

    Driver执行js代码

    • execute_async_script(script,*args):在当前的window/frame中异步执行js代码

    • script:是你要执行的js代码

    • *args:是你的js代码执行要传入的参数

    number = 10
     for line in range(10):
      # 模拟滚轮操作
    js_code = '''
         window.scrollTo(0, %s)
       ''' % number
      # execute_script: 该方法可以执行js代码
       driver.execute_script(js_code)
       time.sleep(0.5)
       number += 500
    
    • excute_script(script,*arges):在当前的window/frame中同步执行js代码

    Selenium Webelement操作

    • clear() :清空对象中的内容

    • click():单击对象

    • get_attribute(name):优先返回完全匹配属性名的值,如果不存在则返回属性名中包含name的值

    • screenshot(filename):获取当前元素的截图,保存为png,最好用绝对路径

    • send_keys(value):给对象元素输入数据

    • submit():提交表单

    webelement常用属性

    • text:获取当前元素的文本内容

    • tag_name:获取当前元素的标签名

    • size:获取当前元素的大小

    • screenshot_as_png:将当前元素截屏并保存为png格式的二进制数据

    • screenshot_as_base64:将当前元素截屏并保存为base64编码的字符串

    • rect:获取一个包含当前元素大小和位置的字典

    • parent:获取当前元素的父节点

    • location:当前元素的位置

    • id:当前元素的id值

    Action-Chains方法

    动作链:调用动作链类可以得到一个对象,对象中有方法可以帮你做,拖拽图片等操作

    • click:左键单击

    • context_click:右键单击

    • double_click:双击

    • click_and_hold:点击并抓起

    • drag_and_drop(source,target):在source元素上点击抓起,移动到target元素上松开放下

    • drag_and_drop_by_offset(source,xoffset,yoffset):在source元素上点击抓起,移动到相对source元素偏移xoffset和yoffset的坐标位置放下

    • send_keys(*keys_to_send):将键发送到当前聚焦的元素

    • send_keys_to_element(element.*keys_to_send):将键发送到指定的元素

    • reset_actions():清除已经存储的动作

      driver = webdriver.Chrome()
      try:
          driver.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
          driver.implicitly_wait(3)  # 使用隐式等待
          # 切换到  id为iframeResult 的 iframe标签页面中
          driver.switch_to.frame('iframeResult')
          # 需要拖动图片块的 源位置
          source = driver.find_element_by_id('draggable')
          print(source.location)
          # 根据id为droppable 属性查找目标快 标签对象
          target = driver.find_element_by_id('droppable')
       # 滑块的距离
          distance = target.location.get('x') - source.location.get('x')
          # 注意: 只要是 ActionChains(driver)调用的方法,都需要调用 perform方法来执行
          # 先点击鼠标,按住拖拽的标签
          ActionChains(driver).click_and_hold(source).perform()
          number = 0
          while number < distance:
      
       # 循环滑动,每次滑动3 每次移动3格
          ActionChains(driver).move_by_offset(xoffset=3,yoffset=0).perform()
              number += 3
          # 移动完毕后,必须释放
          ActionChains(driver).release().perform()
          time.sleep(100)
      finally:
          driver.close()
      

    Selenium Wait

    • 显示等待

      from selenium import wdbdriver
      from selenium.wedbriver.common.by import By
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.wedbriver.support import expected_conditions as ES
      
      driver = webdriver.Chrome()
      driver.get(网址)
      try:
          element =WebDriverWait(driver,10).until(
          EC.presence_of_element_located((By.ID,"myDynamicElement")))
      finally:
          driver.quit()
      
    • 隐式等待:在webdriver中进行find_element这类查找操作时,如果找不到元素,则会默认的轮询等待一段时间

      from selenium import wedbriver
      
      driver =webdriver.Chrome()
      driver.implicitly_wait(10)
      driver.get('网址')
      

    Driver操作Cookie

    add_cookie(cookie_dict):给当前会话添加一个cookie

    cookie_dict:一个字典对象,必须要有"name"和value两个键,可选的键有:'path'、‘domain

    、’secure‘、’expiry‘

  • 相关阅读:
    JVM 基础知识
    Maven 学习
    Java 中 split() 方法
    JDK、JRE、JVM三者联系与区别
    Effective C++ 笔记 —— Item 5: Know what functions C++ silently writes and calls
    Effective C++ 笔记 —— Item 4: Make sure that objects are initialized before they’re used
    Effective C++ 笔记 —— Item 3: Use const whenever possible
    Effective C++ 笔记 —— Item 2: Prefer consts, enums, and inlines to #defines
    Idea社区版使用插件完成正常开发
    DNS配置
  • 原文地址:https://www.cnblogs.com/lzss/p/12146925.html
Copyright © 2011-2022 走看看