码迷,mamicode.com
首页 > 其他好文 > 详细

selenium

时间:2019-03-31 23:21:14      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:row   mon   fresh   button   选择   很多   https   page   comm   

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。

selenium

标签:row   mon   fresh   button   选择   很多   https   page   comm   

原文地址:https://www.cnblogs.com/tmdhhl/p/selenium.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!