zoukankan      html  css  js  c++  java
  • Selenium WebDriver

    Selenium WebDriver

    一、浏览器操作方法

    from selenium import webdriver
    driver = webdriver.Firefox("驱动路径") #
    driver.get("http://www.XX.com")
    
    driver.maximize_window()              #最大化
    driver.set_window_position(0,0)       #设置浏览器位置
    driver.set_window_size(1300,500)      #设置浏览器大小
    driver.back()                         #后退
    driver.forward()                      #前进
    driver.refresh()                      #刷新
    driver.close()                        #关闭当前窗口
    driver.quit()                         #关闭所有WebDriver启动的窗口
    driver.title                #获取页面title
    driver.current_url          #获取当前页面url
    driver.get_screenshot_as_file('1.jpg')  #截屏
    

    二、选择器

    from selenium import webdriver
    driver = webdriver.Firefox("驱动路径")
    driver.get("http://www.XX.com")
    
    driver.find_element_by_id("name")                   #id定位
    driver.find_element_by_name("PeriodName")           #name定位
    driver.find_element_by_class_name("u-btn-levred")   #class定位
    driver.find_element_by_tag_name("input")            #tag定位(标签)
    driver.find_element_by_link_name("text")            #link定位(专门用来定位文本链接)
    driver.find_element_by_partial_link_text("text")    #是对link定位的一种补充(可选区部分连接文本#唯一)
    driver.find_element_by_xpath('//*[@id="kw"]')       #xpath定位(支持相对路径,绝对路径)
    driver.find_element_by_css_selector("input")        #css定位(标签选择器"input"id选择器"#id_name"类class选择器".class_name"属性选择器"[type=submit]")层级选择器(可以多条件定位 空格隔开)
    

    如果选择出来多个使用find_elements 选择所有,然后用下标定位,列如 .find_element_by_link_name("text")[0]

    xpath与css定位功能都很强大,速度上css更快(但是对我来说速度啥的没啥用)

    拓展(By定位元素)

    除find_element_by_***这种方式,还有另一套写法,也就是统一调用find_element()方法,两个参数,第一个参数是定位的类型,由By提

    供;第二个参数是定位的具体值

    from selenium import webdriver
    from selenium.webdriver.common.by import By     #使用By这种定位前要将By类导入
    
    driver = webdriver.Firefox("驱动路径")
    driver.get("http://www.XX.com")
    
    driver.find_element(By.ID,"loginName")
    driver.find_element(By.NAME,"SubjectName")
    driver.find_element(By.CLASS_NAME,"u-btn-levred")
    driver.find_element(By.TAG_NAME,"input")
    driver.find_element(By.LINK_TEXT,"退出")
    driver.find_element(By.PARTIAL_LINK_TEXT,"退")
    driver.find_element(By.XPATH,".//*[@id='Title")
    driver.find_element(By.CSS_SELECTOR,"[type=submit]")
    

    推荐使用第一种

    三、元素操作方法

    from selenium import webdriver
    driver = webdriver.Firefox("驱动路径")
    driver.get("http://www.XX.com")
    
    element = driver.find_element_by_id("name")
    element.click()
    
    element.click()          #点击元素
    element.send_keys()      #输入
    element.clear()          #清除文本
    element.size                 #返回元素大小
    element.text                 #获取元素的文本
    element.get_attribute("id")  #获取属性值
    element.is_display()         #判断元素是否可见
    element.is_enable()          #判断元素是否可用
    

    四、鼠标操作

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    
    driver = webdriver.Firefox("驱动路径")
    driver.get("http://www.XX.com")
    mouse = ActionChains(driver)
    
    element = driver.find_element_by_id("name")
    mouse.click(element).perform()    #.perform()执行
    
    
    mouse.click(on_element=None)                    #单击鼠标左键
    mouse.click_and_hold(on_element=None)           #点击鼠标左键,按住不放
    mouse.context_click(on_element=None)              #点击鼠标右键
    mouse.double_click(on_element=None)               #双击鼠标左键
    mouse.drag_and_drop(source, target)               #拖拽到某个元素然后松开
    mouse.drag_and_drop_by_offset(source, xoffset, yoffset)          #拖拽到某个坐标然后松开
    mouse.move_by_offset(xoffset, yoffset)            #鼠标移动到距离当前位置(x,y)
    mouse.move_to_element(to_element)                 #鼠标移动到某个元素
    mouse.move_to_element_with_offset(to_element, xoffset, yoffset) #将鼠标移动到距某个元素多少距离的位置
    mouse.release(on_element=None)                    #在某个元素位置松开鼠标左键
    .perform()                                        #执行链中的所有动作
    
    

    五、键盘操作

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    
    driver = webdriver.Firefox("驱动路径")
    driver.get("http://www.XX.com")
    
    element = driver.find_element_by_id("name")
    element.send_keys()
    
    element.send_keys(Keys.BACK_SPACE)  #删除键(BackSpace)
    element.send_keys(Keys.SPACE)       #空格键(Space)
    element.send_keys(Keys.TAB)         #制表键(Tab)
    element.send_keys(Keys.ESCAPE)      #回退键(Esc)
    element.send_keys(Keys.ENTER)       #回车键(Enter)
    element.send_keys(Keys.CONTROL,'a') #全选(Ctrl+A)
    element.send_keys(Keys.CONTROL,'c') #复制(Ctrl+C)
    element.send_keys(Keys.CONTROL,'x') #剪切(Ctrl+X)
    element.send_keys(Keys.CONTROL,'v') #粘贴(Ctrl+V)
    element.send_keys(Keys.F1)          #键盘F1
    

    主要为了实现输入特殊按键,和组合键

    六、元素等待

    sleep 强制等待

    from time import sleep
    
    sleep(2)    #设置等待2秒钟
    

    implicitly_wait() 隐性等待

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.implicitly_wait(20) #设置等待20秒钟,全局生效
    driver.get('http://www.XX.com')
    

    WebDriverWait()显示等待

    from selenium import webdriver
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.ui import WebDriverWait    #WebDriverWait注意大小写
    from selenium.webdriver.common.by import By
    
    driver = webdriver.Chrome()
    driver.get('http://www.XX.com')
    
    element = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'kw')))
    element.send_keys('123')
    

    七、下拉框

    通过select 进行定位下拉框

    from selenium import webdriver
    from selenium.webdriver.support.ui import Select
    
    driver = webdriver.Chrome()
    driver.get('http://www.XX.com')
    element = driver.find_element_by_id("wb") #定位select标签
    select = Select(element)   #实列化
    
    select.select_by_index(1).click()  #通过index进行选择
    select.select_by_value(1).click()  #通过value进行选择
    select.select_by_visile_text("1").click()  #通过选项文字进行选择
    

    多级定位

    element=driver.find_element_by_id("wb")
    element.find_element_by_xpath("//option[@value='0']").click()
    

    css直接定位

    driver.find_element_by_css_selector("#id > option:nth-child(1)").click() #直接定位
    

    八、弹窗

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get('http://www.XX.com')
    driver.find_element_by_xpath("//input[@onclick='showAlert()']").click() #点击元素弹窗
    alert_window = driver.switch_to.alert #切换到弹窗
    
    alert_window.text             #获取对话窗文本值
    alert_window.accept()         #接受弹窗
    alert_window.dismiss()        #取消弹窗
    alert_window.send_keys()      #输入值(alert和confirm没有输入对话框,所以就不用能用了,只能使用在prompt里)
    

    九、frame

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get('http://www.XX.com')
    
    iframe = driver.find_element_by_id("name")         #通过id获取元素
    iframe = driver.find_element_by_name("name")        #通过name获取元素
    iframe = driver.find_elements_by_tag_name("iframe")[-1]  #先定位标签,再索引获取元素
    
    driver.switch_to.frame(iframe)              #切换frame
    driver.switch_to.parent_frame()              #返回到父级
    driver.switch_to.default_content()           #返回最外层
    

    十、窗口

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get('http://www.XX.com')
    #获取窗口句柄
    current_handle = driver.current_window_handle
    all_handles = driver.window_handles
    #切换窗口
    driver.switch_to.window(all_handles[-1])
    driver.switch_to.window(current_handle)
    

    十一、cookie

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get('http://www.XX.com')
    
    driver.get_cookie(name)        #返回单个名为name的cookie信息,如果没有找到,返回none
    driver.get_cookies()           #返回当前会话所有的cookie信息
    driver.add_cookie(cookie_dict) #在当前会话中添加cookie信息
    driver.delete_cookie(name)     #删除单个名为name的cookie信息
    driver.delete_all_cookies()    #在当前会话中删除所有cookie信息
    

    十二、JS

    driver.execute_async_script(script, args)  #异步执行JS代码,script:被执行的JS代码,args:js代码中的任意参数
    driver.execute_script(script, args)  #同步执行JS代码,script:被执行的JS代码,args:js代码中的任意参数
    
    #举例:使用js拖动混动条
    js = "window.scrollTo(0,10000)"      #(0,100)滚动条位置
    driver.execute_script(js)
    

    十三、WebDriver下载地址

    下载地址:http://chromedriver.storage.googleapis.com/index.html
    或者 http://npm.taobao.org/mirrors/chromedriver/
    
  • 相关阅读:
    J2SE-反射
    c3p0 连接数据库失败的问题
    c# 调用存储过程
    存储过程使用truncate时
    Parcelable intent传递对象时,需要将该对象实现Parcelable 或者Serializable
    android intent 在打开设置activity的时候在监听事件的内部 适用setclass()方法时 不是直接适用this 关键字
    c# 读取appconfig文件
    Oracle 连接数据库的几种方式
    通过反射获得方法,和绑定事件
    js 验证
  • 原文地址:https://www.cnblogs.com/lazy-sang/p/13623270.html
Copyright © 2011-2022 走看看