zoukankan      html  css  js  c++  java
  • selenium

    Selenium

    1. 什么是selenium?

    2. 安装
      pip install selenium

    3. 基本使用

      • 实例化Chrome Webdriver
      from selenium import webdriver
      browser = webdriver.Chrome()
      
      • browser.get()方法将打开URL中填写的地址,WebDriver 将等待, 直到页面完全加载完毕(其实是等到”onload” 方法执行完毕),然后返回继续执行你的脚本。但是如果页面使用了大量的Ajax加载, WebDriver可能不知道页面什么时候加载完成。
      url = 'https://www.baidu.com'
      browser.get(url)
      
      • 选择页面元素,提供了如下方式

        • find_element_by_id
        • find_element_by_name
        • find_element_by_xpath
        • find_element_by_link_text
        • find_element_by_partial_link_text
        • find_element_by_tag_name
        • find_element_by_class_name
        • find_element_by_css_selector
      • 一次查找多个元素 (返回list):

        • find_elements_by_name

        • find_elements_by_xpath

        • find_elements_by_link_text

        • find_elements_by_partial_link_text

        • find_elements_by_tag_name

        • find_elements_by_class_name

        • find_elements_by_css_selector

      • 除上述查找元素的方法外,还有两个私有方法find_element和find_elements

      from selenium.webdriver.common.by import By
      # By的可用属性分别为:ID、XPATH、LINK_TEXT、PARTIAL_TEXT、NAME、CLASS_NAME、CSS_SELECTOR
      
      driver.find_element(By.XPATH, '//button[text()="Some text"]')
      driver.find_elements(By.XPATH, '//button')
      
      • 显式等待
        因为现在很多页面中都大量使用了Ajax,会造成页面中不同的元素加载完成的时间不同,就使得查找页面元素有时会不成功,为了解决这种问题,可以使用waits。waits提供了一些操作之间的时间间隔---主要是定位元素或针对该元素的任何其他操作。
        显式等待会让WebDriver等待满足一定的条件以后再进一步的执行。
      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("http://somedomain/url_that_delays_loading")
      try:
          element = WebDriverWait(driver, 10).until(
              EC.presence_of_element_located((By.ID, "myDynamicElement"))
          )
      finally:
          driver.quit()
      

      expected_conditions 模块提供了一组预定义的条件供WebDriverWait使用。

      from selenium.webdriver.support import expected_conditions as EC
      
      wait = WebDriverWait(driver, 10)
      element = wait.until(EC.element_to_be_clickable((By.ID,'someid')))
      
      • 隐式等待
        让Webdriver等待一定的时间后再才是查找某元素。
      from selenium import webdriver
      
      driver = webdriver.Firefox()
      driver.implicitly_wait(10) # seconds
      driver.get("http://somedomain/url_that_delays_loading")
      myDynamicElement = driver.find_element_by_id("myDynamicElement")
      
      • 向input框中输入值
      browser.find_element_by_id('kw').send_keys('Python')
      
      • 提交
      browser.find_element_by_id('submit')
      
      • 其他常用操作
      page_source  # 页面源码 
      execute_script('js')  # 执行js代码
      fullscreen_window()  # 浏览器全屏
      get_screenshot_as_base64()  # 截屏保存为base64格式
      get_screenshot_as_file(filename)  # 截屏保存为文件
      get_screenshot_as_png()  # 截屏保存为png
      save_screenshot(filename)  # 同上
      quit()  # 关闭浏览器
      close()  # 关闭当前Tab页面
      refresh()  # 刷新页面
      switch_to_frame(frame_reference)  # 切换到另一个frame
      更多请查看:https://selenium-python-zh.readthedocs.io/en/latest/api.html
      
    4. Chrome无头模式设置

    from selenium.webdriver.chrome.options import Options
    # 创建一个参数对象,用来控制chrome以界面模式打开
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')
    
    browser = webdriver.Chrome(executable_path=path,chrome_options=chrome_options)
    
    1. 为什么selenium不能被用于线上项目?(除非可以检测使用的浏览器版本)
      无法预知用户端使用的是什么浏览器,如果用户使用的浏览器和我们代码都得Webdriver版本不对应,可能出现无法正常工作的现象,所以一般上线不使用selenium。
    2. 虚假UserAgent
    from fake_useragent import UserAgent
    ua = UserAgent(verify_ssl=False, use_cache_server=False).random
    
  • 相关阅读:
    Authentication for the REST APIs
    Authentication for the REST APIs
    泛型转Datatable
    Web API 返回json文件的2中不用方式
    Robotframework自定义关键字库
    python通过接口上传图片造测试数据
    robot framework(2) 环境搭建
    RobotFrameWork(1) 关键字驱动测试框架
    python发送带附件的邮件
    解决adb连接海马玩模拟器
  • 原文地址:https://www.cnblogs.com/tmdhhl/p/selenium.html
Copyright © 2011-2022 走看看