zoukankan      html  css  js  c++  java
  • Python Selenium Webdriver常用方法总结

    常用方法函数

    1. 加载浏览器驱动: webdriver.Firefox()
    2. 打开页面:get()
    3. 关闭浏览器:quit()
    4. 最大化窗口: maximize_window()
    5. 设置窗口参数:set_window_size(600,800)
    6. 后退到前一页: back()
    7. 前进到后一页: forward()
    8. 刷新页面: refresh()
    9. 元素定位:
      1. 复制代码
        1,id定位:find_element_by_id()
        2,name定位:find_element_by_name()
        3,class定位:find_element_by_class()
        4,tag定位:find_element_by_tag_name()
        5,link定位:find_element_by_link_text()
        6,partial link 定位: find_element_by_partial_link_text()
        7,CSS定位:find_element_by_css_selector()
        
        8,Xpath定位:
        绝对路径:find_element_by_xpath("/html/body/div[x]/div[x]/div/div/dl[x]/dt/a")
        元素属性:find_element_by_xpath("//unput[@id=‘kw’]")
        层级与属性结合:find_element_by_xpath("//form[@id=‘loginForm’]/ul/input[1]")
        逻辑运算符:find_element_by_xpath("//input[@id=‘kw’ and@class=‘s_ipt’]")
        复制代码
    10. 清除文本:clear()
    11. 模拟按键输入:send_keys(*value)11.模拟按键输入:send_keys(*value)
    12. 单击元素:click()
    13. 提交表单(相当于"回车"):submit()
    14. 鼠标事件:
    复制代码
    #coding:utf-8
    from selenium.webdriver.common.action_chains import ActionChains
    
    ActionChains(driver).***opration(opra)*** .perform()
    
    elemengt = driver.find_element_by_xpath("xpath")
    ActionChains(driver).    double_click(DoubleClick)     .perform()#双击
    ActionChains(driver).    context_click(RightClick)     .perform()#右击
    ActionChains(driver).    drag_and_drop(Start, End)     .perform()#拖放
    ActionChains(driver).    move_to_element(Above)         .perform()#悬停
    ActionChains(driver).    click_and_hold(leftclick)     .perform()#按下
    复制代码

    键盘相关:

    1. 键盘事件:
      send_keys(Keys.BACK_SPACE) = BackSpace
      send_keys(Keys.SPACE) = Space
      send_keys(Keys.TAB) = Tab
      send_keys(Keys.ESCAPE) = Esc
      send_keys(Keys.ENTER) = Enter
      send_keys(Keys.CONTROL,‘a’) = Ctrl+A
      send_keys(Keys.F1) = 键盘F1
    2. 元素等待:
      • 显示等待
    复制代码
    #coding=utf-8
    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
    
    base_url = "http://www.baidu.com"
    driver = webdriver.Firefox()
    driver.implicitly_wait(5)
    '''隐式等待和显示等待都存在时,超时时间取二者中较大的'''
    locator = (By.ID,'kw')
    driver.get(base_url)
    
    WebDriverWait(driver,10).until(EC.title_is(u"百度一下,你就知道"))
    '''判断title,返回布尔值'''
    
    WebDriverWait(driver,10).until(EC.title_contains(u"百度一下"))
    '''判断title,返回布尔值'''
    
    WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'kw')))
    '''判断某个元素是否被加到了dom树里,并不代表该元素一定可见,如果定位到就返回WebElement'''
    
    WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.ID,'su')))
    '''判断某个元素是否被添加到了dom里并且可见,可见代表元素可显示且宽和高都大于0'''
    
    WebDriverWait(driver,10).until(EC.visibility_of(driver.find_element(by=By.ID,value='kw')))
    '''判断元素是否可见,如果可见就返回这个元素'''
    
    WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,'.mnav')))
    '''判断是否至少有1个元素存在于dom树中,如果定位到就返回列表'''
    
    WebDriverWait(driver,10).until(EC.visibility_of_any_elements_located((By.CSS_SELECTOR,'.mnav')))
    '''判断是否至少有一个元素在页面中可见,如果定位到就返回列表'''
    
    WebDriverWait(driver,10).until(EC.text_to_be_present_in_element((By.XPATH,"//*[@id='u1']/a[8]"),u'设置'))
    '''判断指定的元素中是否包含了预期的字符串,返回布尔值'''
    
    WebDriverWait(driver,10).until(EC.text_to_be_present_in_element_value((By.CSS_SELECTOR,'#su'),u'百度一下'))
    '''判断指定元素的属性值中是否包含了预期的字符串,返回布尔值'''
    
    #WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it(locator))
    '''判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False'''
    #注意这里并没有一个frame可以切换进去
    
    WebDriverWait(driver,10).until(EC.invisibility_of_element_located((By.CSS_SELECTOR,'#swfEveryCookieWrap')))
    '''判断某个元素在是否存在于dom或不可见,如果可见返回False,不可见返回这个元素'''
    #注意#swfEveryCookieWrap在此页面中是一个隐藏的元素
    
    WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='u1']/a[8]"))).click()
    '''判断某个元素中是否可见并且是enable的,代表可点击'''
    driver.find_element_by_xpath("//*[@id='wrapper']/div[6]/a[1]").click()
    #WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='wrapper']/div[6]/a[1]"))).click()
    
    #WebDriverWait(driver,10).until(EC.staleness_of(driver.find_element(By.ID,'su')))
    '''等待某个元素从dom树中移除'''
    #这里没有找到合适的例子
    
    WebDriverWait(driver,10).until(EC.element_to_be_selected(driver.find_element(By.XPATH,"//*[@id='nr']/option[1]")))
    '''判断某个元素是否被选中了,一般用在下拉列表'''
    
    WebDriverWait(driver,10).until(EC.element_selection_state_to_be(driver.find_element(By.XPATH,"//*[@id='nr']/option[1]"),True))
    '''判断某个元素的选中状态是否符合预期'''
    
    WebDriverWait(driver,10).until(EC.element_located_selection_state_to_be((By.XPATH,"//*[@id='nr']/option[1]"),True))
    '''判断某个元素的选中状态是否符合预期'''
    driver.find_element_by_xpath(".//*[@id='gxszButton']/a[1]").click()
    
    instance = WebDriverWait(driver,10).until(EC.alert_is_present())
    '''判断页面上是否存在alert,如果有就切换到alert并返回alert的内容'''
    print(instance.text)
    instance.accept()
    
    driver.close()
    复制代码

               2. 隐式等待

    from selenium.common.exceptions import NoSuchElementException
    drive.implicitly_wait(10)

    表单窗口相关操作

    1. 多表单切换:switch_to.frame()
    2. 多窗口切换:switch_to.window()
      当前句柄:current_window_handle
      所有句柄:window_handles
    3. 警告框处理:switch_to_alert()
      text:返回所有alert/confirm/prompt中的文字信息
      accept():接受现有警告框
      dismiss():解散现有警告框
      send_keys(keysToSend):发送文本至警告框
    4. cookie处理:
      get_cookies():获得所有cookie信息
      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信息
    5. 窗口截图:get_screenshot_as_file()
    6. 关闭窗口:close()
    7. 生成随机数:radint()
    8. 获得title并打印
    复制代码
    #coding:utf-8
    from selenium import webdriver
    
    title = driver.title
    print(title)
    
    if title == u"百度一下,你就知道":#比较title
      print("title yes!")
    else:
    print("title no!")
    
    url = driver.current_url#获得当前URL并打印
    print(url)
    复制代码

          9.滚动条设置(2种方式):

    复制代码
    # 使用scrollTop滑动到底部
    js = "var action=document.documentElement.scrollTop=10000"
    driver.execute_script(js)
    
    # 使用scrollTo设置位置
    driver.set_window_size(600, 600)
    js = "window.scrollTo(100,450);"
    driver.execute_script(js)
    复制代码

    常用方法函数

    1. 加载浏览器驱动: webdriver.Firefox()
    2. 打开页面:get()
    3. 关闭浏览器:quit()
    4. 最大化窗口: maximize_window()
    5. 设置窗口参数:set_window_size(600,800)
    6. 后退到前一页: back()
    7. 前进到后一页: forward()
    8. 刷新页面: refresh()
    9. 元素定位:
      • id定位:find_element_by_id()
      • name定位:find_element_by_name()
      • class定位:find_element_by_class()
      • tag定位:find_element_by_tag_name()
      • link定位:find_element_by_link_text()
      • partial link 定位: find_element_by_partial_link_text()
      • CSS定位:find_element_by_css_selector()
      • Xpath定位:
        • 绝对路径:find_element_by_xpath("/html/body/div[x]/div[x]/div/div/dl[x]/dt/a")
        • 元素属性:find_element_by_xpath("//unput[@id=‘kw’]")
        • 层级与属性结合:find_element_by_xpath("//form[@id=‘loginForm’]/ul/input[1]")
        • 逻辑运算符:find_element_by_xpath("//input[@id=‘kw’ and@class=‘s_ipt’]")
    10. 清除文本:clear()
    11. 模拟按键输入:send_keys(*value)11.模拟按键输入:send_keys(*value)
    12. 单击元素:click()
    13. 提交表单(相当于"回车"):submit()
    14. 鼠标事件:
      #coding:utf-8
      from selenium.webdriver.common.action_chains import ActionChains
      
      ActionChains(driver).***opration(opra)*** .perform()
      
      elemengt = driver.find_element_by_xpath("xpath")
      ActionChains(driver).	double_click(DoubleClick) 	.perform()#双击
      ActionChains(driver).	context_click(RightClick) 	.perform()#右击
      ActionChains(driver).	drag_and_drop(Start, End) 	.perform()#拖放
      ActionChains(driver).	move_to_element(Above) 		.perform()#悬停
      ActionChains(driver).	click_and_hold(leftclick) 	.perform()#按下
      
    15. 多表单切换:switch_to.frame()
    16. 多窗口切换:switch_to.window()
      当前句柄:current_window_handle
      所有句柄:window_handles
    17. 警告框处理:switch_to_alert()
      text:返回所有alert/confirm/prompt中的文字信息
      accept():接受现有警告框
      dismiss():解散现有警告框
      send_keys(keysToSend):发送文本至警告框
    18. cookie处理:
      get_cookies():获得所有cookie信息
      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信息
    19. 窗口截图:get_screenshot_as_file()
    20. 关闭窗口:close()
    21. 生成随机数:radint()
    22. 获得title并打印
      #coding:utf-8
      from selenium import webdriver
      
      title = driver.title
      print(title)
      
      if title == u"百度一下,你就知道":#比较title
        print("title yes!")
      else:
      print("title no!")
      
      url = driver.current_url#获得当前URL并打印
      print(url)
      
      1滚动条设置(2种方式):# 使用scrollTop滑动到底部
    23. js = "var action=document.documentElement.scrollTop=10000"
      driver.execute_script(js)
      
      # 使用scrollTo设置位置
      driver.set_window_size(600, 600)
      js = "window.scrollTo(100,450);"
      driver.execute_script(js)
  • 相关阅读:
    Java 第十一届 蓝桥杯 省模拟赛 洁净数
    Java 第十一届 蓝桥杯 省模拟赛 第十层的二叉树
    Java 第十一届 蓝桥杯 省模拟赛 第十层的二叉树
    Java 第十一届 蓝桥杯 省模拟赛 第十层的二叉树
    Java 第十一届 蓝桥杯 省模拟赛 70044与113148的最大公约数
    Java 第十一届 蓝桥杯 省模拟赛 70044与113148的最大公约数
    20. Valid Parentheses
    290. Word Pattern
    205. Isomorphic Strings
    71. Simplify Path
  • 原文地址:https://www.cnblogs.com/georgexu/p/11224185.html
Copyright © 2011-2022 走看看