美文网首页
web自动化--操作

web自动化--操作

作者: xiaohan_zhang | 来源:发表于2020-05-12 13:44 被阅读0次
    一、操作元素
    • 清空数据
      driver.find_element_by_id('kw').clear()
    • 输入数据
      driver.find_element_by_id('kw').send_keys('央视网')
    • 点击
      driver.find_element_by_id('su').click()
    • 上传文件
      driver.find_element_by_css_selector('#upfile').send_keys('文件路径')
    二、操作浏览器
    • 浏览器最大化
      driver.maximize_window()
    • 设置窗口大小
      driver.set_window_size(600, 520)
    • 设置浏览器窗口位置
      driver.set_window_position(200, 100)
    • 后退
      driver.back()
    • 前进
      driver.forward()
    • 刷新
      driver.refresh()
    • 关闭当前窗口
      driver.close()
    • 关闭浏览器驱动对象
      关闭webdriver启动的所有窗口
      driver.quit()
    • 获取页面title
      driver.title
      一般为判断上一步操作是否成功
    • 获取页面url
      driver.current_url
      一般为判断上一步操作是否成功
    三、获取元素信息
    • 获取元素的大小
      driver.find_element_by_id('1').size
    • 获取元素的文本
      driver.find_element_by_id('1').text
    • 获取元素在屏幕中的位置
      driver.find_element_by_id('1').location
    • 获取元素属性值
      driver.find_element_by_id('1').get_attribute('fk')
      判断一组元素是否为想要的元素,或判断元素属性值是否正确
    • 判断元素是否可见
      driver.find_element_by_id('1').is_displayed()
    • 判断元素是否可见
      driver.find_element_by_id('1').is_enabled())
    • 判断元素是否选中
      driver.find_element_by_id('1').is_selected())
    • 获取包括元素在内的html内容
      driver.find_element_by_id('1').get_attribute('outerHTML')
    • 获取元素内部的html
      driver.find_element_by_id('1').get_attribute('innerHTML')
    四、鼠标操作

    from selenium.webdriver.common.action_chains import ActionChains

    • 获取鼠标操作对象
      action = ActionChains(drive)
    • 执行鼠标操作
      perform()
    • 右击
      action.context_click()
    action.context_click(drive.find_element_by_id('mytxtdafdfasdf')).perform()
    
    • 双击
      action.double_click()
    action.double_click(drive.find_element_by_css_selector('div.gwA18043_ind01')).perform()
    
    • 悬停
      action.move_to_element()
    action.move_to_element(drive.find_element_by_css_selector('#lmdq a')).perform()
    
    • 拖动
      action.drag_and_drop(source, target)
      source: 源元素 要拖动的元素
      target: 目标元素 要拖动到的元素
      action.drag_and_drop_by_offset(source, xoffset, yoffset)
      source: 源元素 要拖动的元素
      xoffset, yoffset: 移动到的位置
    五、键盘操作

    from selenium.webdriver.common.keys import Keys

    • 删除
      send_keys(Keys.BACK_SPACE)
    • 空格
      send_keys(Keys.SPACE)
    • Tab键
      send_keys(Keys.TAB)
    • 回退键ESC
      send_keys(Keys.ESCAPE)
    • 回车
      send_keys(Keys.ENTER)
    • 全选
      send_keys(Keys.CONTROL, 'a')
    • 复制
      send_keys(Keys.CONTROL, 'c')
    • 粘贴
      send_keys(Keys.CONTROL, 'v')
    • 剪切
      send_keys(Keys.CONTROL, 'x')
    六、元素等待

    在定位页面元素时,如果未找到,会在指定时间内等待的过程。

    • 隐式等待
      针对全局有效
      参数秒
      driver.implicitly_wait(10)
      在创建driver时,为浏览器对象创建一个等待时间,这个方法是得不到某个元素就等待一段时间,直到拿到某个元素位置。超时会抛出NoSuchElementException异常。
    • 显式等待
      针对单个元素有效
      明确的要等到某个元素出现或者某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,则NoSuchElementException抛异常。
      from selenium.webdriver.support.ui import WebDriverWait
      WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
        element = WebDriverWait(driver, timeout=10, poll_frequency=0.5).until(
            lambda x: x.find_element_by_id('kw')
        )
        element.send_keys('海贼王')
    
    七、选择框
    • 下拉框-单选
      from selenium.webdriver.support.ui import Select
    # 找到select元素
    select = Select(driver.find_element_by_css_selector('#ss_single'))
    select.select_by_value('小雷老师')
    select.select_by_index(2)
    select.select_by_visible_text('小雷老师')
    
    • 下拉框-多选
    select = Select(wd.find_element_by_css_selector('#ss_multi'))
    # 全不选
    select.deselect_all()
    select.select_by_value('小雷老师')
    select.select_by_index(0)
    select.select_by_visible_text('小凯老师')
    
    • radio 单选框
    radio = wd.find_element_by_css_selector('#s_radio input[checked="checked"]')
    # 点选小雷老师
    wd.find_element_by_css_selector('#s_radio input[value="小雷老师"]').click()
    
    • checkbox 多选框
    checkboxs = wd.find_elements_by_css_selector('#s_checkbox input[checked="checked"]')
    # 为了确保把所有想选的都选中,把所有被选中的都点一遍,变成未选中状态,然后再去选择
    for checkbox in checkboxs:
        checkbox.click()
    wd.find_element_by_css_selector('#s_checkbox input[value="小雷老师"]').click()
    wd.find_element_by_css_selector('#s_checkbox input[value="小凯老师"]').click()
    
    八、弹出框
    • alert 警告框
    alert = driver.switch_to.alert
    # 点击确定按钮
    alert.accept()
    # 获取alert文本
    alert.text
    
    • confirm 确认框
    # 点击确定按钮
    driver.switch_to.alert.accept()
    # 点击取消按钮
    driver.switch_to.alert.dismiss()
    
    • prompt 提示框
    prompt = driver.switch_to.alert
    # 输入信息
    prompt.send_keys('web自动化')
    # 点击确定按钮  提交
    prompt.accept()
    # 取消按钮
    prompt.dismiss()
    
    九、滚动条

    js脚本实现

    # 0:左边距  1000:上边距   单位像素
    js = "window.scrollTo(0, 1000)"
    # 调用js代码
    driver.execute_script(js)
    
    十、窗口切换
    • iframe切换
    wd = webdriver.Chrome()
    wd.get('http://cdn1.python3.vip/files/selenium/sample2.html')
    wd.implicitly_wait(5)
    # 切换到iframe中,参数id或name属性值
    wd.switch_to.frame('frame1')
    # 如果没有id、name属性,可以根据其他属性查找
    # wd.switch_to.frame(wd.find_element_by_css_selector('[src="sample1.html"]'))
    
    elements = wd.find_elements_by_css_selector('.plant')
    for element in elements:
        print(element.text)
    
    # 返回上一级html
    # wd.switch_to.parent_frame()
    
    # 切换到主html 即最开始的html
    wd.switch_to.default_content()
    
    • 多窗口切换
    wd = webdriver.Chrome()
    wd.get('http://tv.cctv.com')
    wd.implicitly_wait(5)
    # 找到节目单
    # link = wd.find_element_by_css_selector('.nav li:nth-child(3) a')
    link = wd.find_element_by_css_selector('.left a:nth-child(1)')
    # 当前窗口
    main_window = wd.current_window_handle
    print(wd.title)
    
    sleep(2)
    link.click()
    # 切换到新窗口
    for handle in wd.window_handles:
        wd.switch_to.window(handle)
        if link.text in wd.title:
            break
    # 当前窗口的title
    print(wd.title)
    sleep(2)
    # 点击链接打开新的标签页,回到主窗口,跳转窗口前保存
    wd.switch_to.window(main_window)
    
    十一、截屏、验证码处理
    • 截屏
      driver.get_screenshot_as_file('./cctv.png')
    # 由于测试时可能失败多次,产生多个截图,可以用时间戳命名
    name = int(time.time())
    driver.get_screenshot_as_file('./' + str(name) + '.png')
    
    • 验证码
      selenium没有提供处理验证码的方法
      (1)去掉验证码(测试环境下采用)
      (2)设置万能验证码(生产环境和测试环境下采用)
      (3)验证码识别技术(通过Python-tesseract来识别图片类型验证码,识别率很难达到100%)
      (4)记录cookie(通过记录仪cookie进行跳过登录)
    十二、cookie

    获取网站所有cookie
    driver.get_cookies()
    获取指定cookie(name对应的值)
    driver.get_cookie('BIDUPSID')
    添加cookie
    driver.add_cookie({'name': 'BDUSS', 'value': BDUSS})

    相关文章

      网友评论

          本文标题:web自动化--操作

          本文链接:https://www.haomeiwen.com/subject/rlyvnhtx.html