• web自动化(python)——selenium工具基本使用


    WebDriver基本操作

    生成driver——启动浏览器

    #启动谷歌浏览器,预先安装chromedrvier插件
    from selenium import webdriver
    driver = webdriver.Chrome()
    

    打开页面

    driver.get(url)
    

    窗口操作

    • 大小调整

      # 窗口最大化
      driver.maxmize_window()
      # 窗口最小化
      driver.minmize_window()
      # 设定宽高,单位px
      driver.set_window_size()
      
    • 前进后退

      # 后退
      driver.back()
      # 前进
      driver.forward()
      # 刷新
      driver.refresh()
      
    • 关闭和退出

      # 关闭
      driver.quit()
      # 退出
      driver.close()
      

    定位方式

    1. 分类:

      ​ element和element(返回列表)

    2. 定位方式

      # 利用ID定位
      driver.find_element_by_id(cont)
      # 利用NAME定位
      driver.find_element_by_name(cont)
      # 利用CLASS_NAME定位
      driver.find_element_by_class_name(cont)
      # 利用CSS_SELECTOR定位
      driver.find_element_by_css_selector(cont)
      # 利用XPATH定位,分为相对路径和绝对路径
      driver.find_element_by_xpath(cont)
      # 利用LINK_TEXT定位
      driver.find_element_by_link_text(cont)
      # 利用TAG_NAME定位
      driver.find_element_by_tag_name(cont)
      
    3. 优先级

        	ID> NAME>CSS_SELECTOR>XPATH
      

    基本键盘鼠标操作

    • click() # 单击
    • send_keys() # 输入
    • clear() # 清空

    等待方式

    强制等待

    import time
    time.sleep(S)
    

    隐式等待

    driver.implicitly_wait(S)
    

    显示等待

    # 导入模块
    from selenium.webdriver.support.ui import WebDriverWait
    # 打来页面时开始查询元素,找到后立即执行
    WebDrivewrWait(driver,timeout,intberval).until(lambda driver: driver.find_XXX(XX))
    

    窗口切换

    iframe 切换

    # 切进
    driver.switch_to.frame(ele)
    # 切进去,多层时需要一层一层切换,切换回时直接退回默认位置
    driver.switch_to.default_content()
    

    alert (弹窗)切换

    # 确定
    driver.switch_to.alert.accept()
    # 取消
    driver.switch_to.alert.dismiss()
    

    windows窗口切换

    # 获得句柄的列表
    driver.window_handles()
    # 跳转窗口,回到首页使用index=0
    driver.seitch_to.window(window_handles[index])
    
    

    下拉选择框

    # 导入库
    from selenium.Webdriver.support.select import Select
    sele_le = driver.find_element_by_id(cont)
    # 按下标选择
    select(sele_le).select_by_index(intnum)
    # 根据值选择
    select().deselect_by_visible_text(value)
    

    通过验证码

    使用万能验证码(开发设置)

    使用添加cookie的方式

    1. 免于登录,顺便绕过验证码

      driver.add_cookie({"name":"XXX","value":"XXX"})
      
    2. 通过查看接口的方式来获取所有登录时获得的cookie;

    图像识别技术(OTP引擎)

    屏蔽验证码

    文件上传

    1. 通过send_keys()

      driver.find_element_by_id("Idvalue").send_keys(path)
      driver.find_element_by_xpath("").click()
      
    2. 通过Pykeyboara,需要依次安装pyHook和PyUserInput

    3. 使用sikulik的jar包

    4. 其他,比如AutoIt

    鼠标键盘操作

    鼠标操作

    from selenium.webdriver.common.action_chains import Actionchains
    # 用Actionchains增强driver
    # 点击右键
    ActionChains(driver).context_click(ele).perform()
    # 双击
    ActionChains(driver).double_click(ele).perform()
    # 悬停
    ActionChains(driver).move_to_element(ele).perform()
    # 长按
    ActionChains(driver).click_and_hold(ele).perform()
    # ActionChains用于生成用户的行为,所有的行为都存储在ActionChains对象,通过perform()执行存储的行为
    

    键盘操作

    from selenium.webdriver.common.keys import Keys
    # 直接对元素进行按键操作
    ele.send_keys("key")
    # 组合按键操作
    ele.send_keys(keys.xxx,"key1","key2")
    

    截图

    1. 方法一:

      driver.get_screenshot_as_file(path+"name.png")
      
    2. 方法二:

      # 遇到弹窗就截图
      driver.save_screenshot(path+"name.png")
      
    3. 方法三:

      # 保存的是base64()格式的文件值,html测试报告里插入图片会用到
      s=driver.get_screenshot_as_base64()
      
    4. 方法四:

      # 保存二进制文件
      S = driver.get_screenshot_as_png()
      

    js注入

    移动滚动条

    1. 方式1(只支持有ID的滚动条):

      js = "var q=document.documentElement.scrollTop=100"
      js_n = "var q=document.documentElement.scrollTop=0"
      driver.execute_script(js_n)
      
    2. 方式2(拖动到指定元素):

      target1=dr.find_element_by_xpath("//*[text()='页面']")
      driver.execute_script("arguments[0].scriollIntoView();",target1)
      

    修改属性

    # 修改某个元素的属性
    js = "document.getElementById('idname').name=value"
    driver.execute_script(js)
    
    
  • 相关阅读:
    3.22
    练习 3.16
    简单工厂模式
    Java-不可变字符串
    java中的缓冲流
    TCP协议下java通信
    nginx优化
    nginx反向代理
    shell-for循环
    shell-数组
  • 原文地址:https://www.cnblogs.com/moyudi/p/12098797.html
Copyright © 2020-2023  润新知