• 测试-----selenuim webDriver


    1.页面导航

    1. 首先是导入对应的包 :from selenium import webdriver
    2. 然后实例化:driver = webdriver.Edge()
    3. 然后获取窗口:driver.get('http://www.toutiao.com/')
    4. 接着进行向前向后更新关闭
    1. 向前 driver.forward()
    2. 向后 driver.back()
    3. 更新 driver.refresh()
    4. 关闭 driver.quit()
    1. 拖动窗口: driver.execute_script([js])
    2. cookie的调用:
    1. get_all_cookies(): 获取所有cookie的信息
    2. delete_all_cookies():删除所有的cookie
    3. get_cookie([name]):返回字典的key为[name]的cookie
    4. add_cookie([cookie_dict]):添加cookie
    5. delect_cookie([name],[optionsString]):删除cookie信息
    1. 打开多窗口
    1. JS='window.open ("https : //www.sogou.com")
    2. driver.execute script (JS)

    2.元素定位

    Selenium提供了如下8种定位方式:

    1. 根据ID定位:find_element_by_id() (目前已经弃用,使用.find_element(By.ID,‘id名’),但是在这个之前要导入from selenium.webdriver.common.by import By)

    #在输入框输入selenium并且按下搜索键
    driver.find_element_by_id("kw") .send_keys ("selenium")
    driver.find_element_by_id("su") .click()

    1. 根据name定位 find_element_by_name()

    在输入框输入selenium并且按下搜索键
    driver.find_element_by_name('wd').send_key('selenuim')
    `driver.find_element_by_name(‘su’).click()

    1. 根据xPath定位
    1. //*[@id=‘kw’]。
    2. //*[@name=‘wd’]。
    3. //input[@class=‘s ipt’]
    4. /html/body/form/span/input。
    5. //span[@class=‘soutu-btn’]/input。
    6. //form[@id=‘form’] /span/input。
    7. //input[@id=‘kw’ and @name=‘wd’]
      通过名字查找并且输入搜索词
      driver.find element by xpath(r'//*[@id="kw"]') .send keys ("selenium")
    1. 根据标签名定位 find_element_by_tag_name()
    2. 根据类名定位: find_element_by_class_name()
    3. 根据css选择器定位:find_element_by_css_selector()
    4. 根据链接文本定位:find_eleent_by_link_text()
    5. 根据部分链接文本定位:find_element_by_partial_link_text()

    3. 浏览器操作

    1. maximize_window():最大化浏览器
    2. set_window_size(width,height):设置窗口大小
    3. set_window_position(x,y) 元素定位
    4. back()返回
    5. forward() 前进
    6. refresh()更新
    7. close() 关闭当前页面
    8. title:获取浏览器的驱动对象
    9. quit()关闭浏览器
    10. current_url 获取当前页面的URL

    4.获取元素信息

    1. size 返回元素的大小
    2. text 返回元素的文本
    3. get_attribute(‘222’) 获取元素的属性值,
    4. is_displayed() 判断元素是不是可见的
    5. is_enable()判断元素是不是可用的
    6. is_selected()判断元素是否选中
      案例:
    #1. 通过selenium访问python 的官网
    from  selenium  import  webdriver
    import  time
    from  selenium.webdriver.common.by import By
    #实例化浏览器对象
    driver = webdriver.Edge()
    
    # 打开对应的页面
    driver.get('https://cn.bing.com/')
    driver.maximize_window()
    driver.find_element(By.ID,'sb_form_q').send_keys('天气网')
    driver.find_element(By.TAG_NAME,'svg').click()
    time.sleep(2)
    driver.get('http://www.weather.com.cn/')
    driver.find_element(By.TAG_NAME,'h2').click()
    # 判断元素的大小
    time.sleep(2)
    result = driver.find_element(By.CLASS_NAME,'picShowOne')
    print(result.size)
    
    # 获取元素的文本
    result2= driver.find_element(By.TAG_NAME,'a')
    print(result.text)
    
    # 获取元素的属性
    result3= driver.find_element(By.TAG_NAME,'a')
    print(result3.get_attribute('class'))
    
    
    # 睡眠几秒钟
    time.sleep(2)
    # 退出界面
    driver.quit()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    输出结果为:

    在这里插入图片描述

    5. 鼠标的操作

    说明:在Seleium中,将操作鼠标的方法封装在ActionChains类中
    操作步骤:
    首先实例化对象:
    action= ActionChains(drivers)

    然后使用方法:

    1. context_click(element) ---->右击
    2. double_click(element) ----> 双击
    3. drag_and_drop(source,tar) ----->拖动
    4. move_to_element(element) ----->悬停
    5. perform()----->执行以上所有操作
    
    #1. 通过selenium访问python 的官网
    from  selenium  import  webdriver
    import  time
    from  selenium.webdriver.common.by import By
    
    # 导入包
    from selenium.webdriver import ActionChains
    # 打开对应的页面
    #实例化浏览器对象
    driver = webdriver.Edge()
    driver.get('https://cn.bing.com/')
    driver.maximize_window()
    
    element = driver.find_element(By.ID,'sb_form')
    #实例化ActionChains对象
    action = ActionChains(driver)
    
    # 调用右键
    action.context_click(element)
    # 执行
    action.perform()
    # 睡眠几秒钟
    time.sleep(2)
    # 退出界面
    driver.quit()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    实例:打开bing 界面,输入天气,暂停三秒,双击鼠标左键然后选中天气

    打开bing 界面,输入天气,暂停三秒,双击鼠标左键然后选中天气
    
    #1. 通过selenium访问python 的官网
    from  selenium  import  webdriver
    import  time
    from  selenium.webdriver.common.by import By
    
    # 导入包
    from selenium.webdriver import ActionChains
    # 打开对应的页面
    #实例化浏览器对象
    driver = webdriver.Edge()
    driver.get('https://cn.bing.com/')
    driver.maximize_window()
    
    element = driver.find_element(By.ID,'sb_form_q')
    element.send_keys('天气')
    time.sleep(3)
    #实例化ActionChains对象
    action = ActionChains(driver)
    
    # 调用右键
    action.double_click(element)
    # 执行
    action.perform()
    # 睡眠几秒钟
    time.sleep(2)
    # 退出界面
    driver.quit()
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    鼠标拖拽操作步骤

    1. 源文件 source=driver.find_element(By.ID,‘id_name1’)
    2. 目标文件 target= driver.find_element(By.ID,‘id_name2’)
    3. 调用方法:action.drag_and_drop(source,target).perform()

    鼠标悬停操作:将鼠标悬停在搜索按钮上

    #打开bing 界面,输入天气,暂停三秒,双击鼠标左键然后选中天气
    
    #1. 通过selenium访问python 的官网
    from  selenium  import  webdriver
    import  time
    from  selenium.webdriver.common.by import By
    
    # 导入包
    from selenium.webdriver import ActionChains
    # 打开对应的页面
    #实例化浏览器对象
    driver = webdriver.Edge()
    driver.get('https://cn.bing.com/')
    driver.maximize_window()
    
    element = driver.find_element(By.ID,'sb_form_q')
    element.send_keys('天气')
    time.sleep(3)
    #实例化ActionChains对象
    action = ActionChains(driver)
    element2 = driver.find_element(By.TAG_NAME,'svg')
    # 鼠标悬停
    action.move_to_element(element2)
    # 执行
    action.perform()
    # 睡眠几秒钟
    time.sleep(2)
    # 退出界面
    driver.quit()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    6. 键盘操作

    1. 导入的包 from selenuim.webdriver.common.keys import Keys
    2. 常用的键盘操作:
    1. send_keys(Keys.BACK_SPACE) 删除键
    2. send_keys(Keys.SPACE) 空格键
    3. send_keys(Keys.TAB) 制表键
    4. send_keys(Keys.ESCAPE) 回退键
    5. send_keys(Keys.ENTEN) 回车键
    6. send_keys(Keys.CONTROL.‘a’) 全选键
    7. send_keys(Keys.CONTROL.‘c’) 复制

    7. 元素等待

    1. 什么是元素等待

    定位页面的时候如果没有找到,会在指定的时间内进行一直等待

    1. 为什么要设置元素等待

    网速慢,电脑配置低,服务器请求慢

    1. 元素等待类型
    1. 隐式等待:
    1. 定位元素的时候,如果能够定位到则返回元素,如果不能定位到,则间隔一定的时 间进行等待,等待一定的时间后,还是没有找到元素的话就抛出没有找到元素异常现象。
    2. 使用方法: driver.implicitly_wait(timeout) :timeout:等待的最大时间
    1. 显式等待:
    1. 定位指定元素时,如果能定位到元素直接返回该元素,不触发等待,如果不能定位到该元素,则间隔一段时间后再去定位该元素,如果达到最大的时间长度还没有定位该元素,则抛出超时异常(TimeoutException)(时间短,与隐式的不同是:隐式只能控制等待时长,不能控制间隔时间,而显式能够控制间隔时间和等待时长)
    2. 实现方法:
    1. 导入相应的包 : from selenium.webdriver.support.wait import webDriverWait
    2. WebDriverWait(driver,timeout,poll_frequency=0.5)
    1. driver: 浏览器驱动对象
    2. timeout: 超时时长
    3. poll_frequency: 检测时间间隔
    1. nutill(method) 直到----才
    2. element = WeDriverWait(driver,10 ,1 ).nutill(lambda x : x.find_element(By.ID,'userA'))

    8.下拉框

    1. 下拉框能够直接获取元素进行操作
    2. select类
    1. 导入包: from selenuim.webdirver.suppport.select import Select
    2. 实例化对象

    select = Select(element) :element表示选择的下拉框的元素

    1. 操作方法
    1. select_by_index(index) -----> 根据option索引来定位,从零开始
    2. select_by_value(value) -----> 根据option 的value来定位,
    3. select_by_visible_text(text) -----> 根据option 的文本来定位,

    9.弹出框

    1. 获取弹出框对象: alert= driver.switch_to.alert
    2. 调用:
    1. alert.text() ----> 返回alert/confirm/prompt 中的文字信息
    2. alert.accept() ----> 接受对话框选项
    3. alert.dismiss() -----> 取消对话框选项
      实例代码:
    # 定位alert按钮
    driver.find_element(By.ID,'alerta').click()
    # 获取警告框
    alert = driver.switch_to_alert
    # 打印警告框文本
    print(alert.text)
    # 接受警告框
    alert.accept()
    # 取消警告框
    alert.dismiss()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    10.滚动条

    1. 应用场景:
    1. 在Html 页面中,由于前端技术框架原因,页面元素为动态显示,元素根据滚动条的下拉而被加载.
    2. 页面注册同意条款,需要滚动条到最底层,才能点击同意
    1. 实现方式

    设置javascript脚本控制滚动条 js = ''window.scrollTo(0,10000)''
    使用js代码的方法 driver.execute_script(js)

    11.frame处理

    frame切换,多窗口切换

    1. frame是Html的一种框架,主要作用是在当前页面中指定区域显示另一个页面的元素:

    12.验证码处理(cookie)

    1. 验证码处理方式:

    1 , selenium 中没有对验证码的处理方式,
    2. 去掉验证码:(测试环境下—采用)
    3. 设置万能验证码: (生产环境下采用)
    4. 验证码识别技术(用python-tesseract识别图形)
    5. 记录cookie (通过记录cookie进行跳过登陆)

    1. 什么是cookie
    1. cookie是web服务器生成的,并且保存在用户浏览器中的小文本文件,包含用户相关信息
    2. cookie数据格式:键值对组成形式
    3. cookie产生:客户端请求服务器,如果服务器需要记录改用户状态,就像客户端浏览器颁发cookie数据
    4. cookie使用:当浏览器再次请求网站时,浏览器将请求的数据和cookie数据一同提交给服务器,服务器检查cookie信息用来判断用户的状态
    1. 执行过程
    1. 首次客户端发送请求——————>客户端
    2. 客户端发送响应和设置的cookie值---------->服务器
    3. 下次客户端发送请求和cookie值------------->服务器
    4. 客户端发送响应
    1. cookie的绕过原理

    客户端登陆账号后,将登陆状态相关的cookie信息发送给服务器保存,在发送请求,携带的cookie信息如果和服务器保留一致,则服务器认为客户端为登陆状态
    操作步骤:百度————》网络——————》application ----->BDUSS(取其值和value)
    方法:

    1.get_cookie(name) 获取指定的cookie
    2. get_cookies() 获取网站上面的所有的本地的cookie
    3. add_cookie(cookie_dict) 添加cookie

  • 相关阅读:
    CentOS 安装HTTP代理服务器 Squid
    mybatis执行自带update方法遇到的坑
    十个一手app拉新地推拉新推广接单平台,放单/接任务渠道
    (附源码)springboot大学生竞赛管理平台 毕业设计
    揭秘短网址背后的灰色产业
    数字孪生背后:谁在构建真实的数字世界?
    基于数据增强与集成学习的小样本识别技术
    天天基金股票数据爬取
    中级C++:哈希
    [iOS]砸壳
  • 原文地址:https://blog.csdn.net/xss125/article/details/132817378