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/
    
  • 相关阅读:
    防火墙透明模式
    HP管理工具System Management Homepage安装配置
    kbmmw 中JSON 中使用SQL 查询
    kbmmw 中JSON 操作入门
    第一个kbmmw for Linux 服务器
    kbmmw 5.02发布
    kbmmw 5.01 发布
    使用delphi 10.2 开发linux 上的Daemon
    使用unidac 在linux 上无驱动直接访问MS SQL SERVER
    使用delphi 10.2 开发linux 上的webservice
  • 原文地址:https://www.cnblogs.com/lazy-sang/p/13623270.html
Copyright © 2011-2022 走看看