【python办公web自动化-selenium学习笔记】

selenium

  • selenium只能做ui(web 浏览器)自动化。
  • selenium组成
    • 浏览器的录制功能
    • Selenium Grid也是Selenium Suite的一个重要组件,它允许在不同的机器上并行运行不同浏览器的测试。 简单来说,可以在运行不同浏览器和操作系统的不同机器上同时运行测试
    • web Driver 控制web浏览器。

python 如何使用 selenium

  • 1.要有python的开发环境
  • 2.下载谷歌浏览器的驱动程式,放在python.exe目录下。(注意python的虚拟环境)
  • 3.安装命令行
    • pip install selenium
    • 由于python安装包可能涉及,可以使用中国清华镜像员安装。

selenium基本代码

  • 1.导入selenium包
  • 2.实例化一个浏览器的对象
  • 3.打开网页
  • 3.1由于运行速度太快,增加一个时间延迟sleep(3)
  • 4.关闭程序
    •   from time import sleep
        driver = webdriver.Chrome()
        driver.get('http://www.baidu.com')
        sleep(3)
        driver.quit()
      
      

selenium选择器

  • id选择器
    • driver.find_element_by_id('id的值')
    • 表签可能存在复数,就用elements,使用时需要用下标的方式选取。
    • driver.find_elements_by_id('id的值')
  • tag选择器
    • driver.find_element_by_tag_name('标签名称')
    • driver.find_elements_by_tag_name('标签名称')
  • name选择器
  • class_name选择器,选择类名
    • 如果calss是多个,必须填写第一个。
  • xpath选择器(注意双引号的问题)
    • 1.绝对路径:/html/body/input[3]
    • 2.相对路径://*input[3]
    • 3.相对路径+属性名称://*[@id=“kw”]
    • 4.相对路径+属性名称+逻辑算法//*[@id=“kw” and @name=“btn”]
    • 5.相对路径+属性名称+相对路径//*[@id=“kw”]/input
  • css选择器(通过css选择器定位元素,官方推荐使用css选择器)
    • driver.find_element_by_css_selector()
      • 1.id选择器 #id
      • driver.find_element_by_css_selector('#id')
      • 2.class选择器 .class名字 只能是一class名称
      • driver.find_element_by_css_selector('.btn')
      • 3.标签选择器 input
      • driver.find_element_by_css_selector('input')
      • 4.属性选择器 input[type=“xxx”]
        • 语法1:[属性名=“属性值”]
        • 语法2:标签名[属性名=“属性值”] 当class有多个属性时,应全部写入。
      • 5.层级选择器
        • 父子(一层元素用) > 连接
        • p[id=‘p1’]>input
        • 父租(后代所有元素) 用 空格
        • p[id=‘p2’] input
      • 6.延伸
        • input[type^=‘p’] type属性以p字母开头元素
        • input[type$=‘d’] type属性以d字母结束元素
        • input[type*=‘w’] type属性包含w字母的元素

By模块的另外一种写法(为了后续封装使用)

  • 导入一个by模块,命名为By(其实原理是调用的By.id的方法)
  • from selenium.webdriver.common.by import By
  • 写法有变化。
  • driver.find_element(By.ID, 'user').send_keys('admin')
  • 注释:
    • 说法1,by方法是By方法的封装。
    • 说法2,By方法是by方法的底层原理。
  • 应用场景:使用PO设计模式时,封住代码结构时使用,使用By方法。

元素的调用的方法

常用操作方法

  • click() 单击元素
  • send_keys(value) 模拟输入
  • clear() 文本清除
  • 注意:在使用操作中,一般对于输入框元素,都要执行清空后,再执行输入,避免操作错误。

浏览器操作

  • 1.maximize_window() 最大化浏览器窗口
  • driver.maximize_window()
  • 2.set_window_size(width,height) 设置浏览器窗口大小
  • driver.set_window_size(width,height)
  • 3.set_window_position(x,y) 设置浏览器窗口位置。
  • driver.set_window_position(x,y)
  • 4.back() 后退
  • driver.back()
  • 5.forward() 前进
  • driver.forward()
  • 6.refresh() 刷新
  • driver.refresh()
  • 7.close() 关闭当前窗口 , 窗口切换。
  • driver.close()
  • 8.quit() 关闭浏览器驱动对象
  • driver.quit()
  • 9.title 获取页面title ,属性。
  • driver.title
  • 10.current_url 获取当前页面URL
  • driver.current_url

鼠标操作

  • 最主要是要用时悬浮,悬浮触发弹窗出现
  • 鼠标操作的方法
    • 1.实例化一个ActionChains类
    • from selenium.webdriver import ActionCharins
    • action = ActionCharins(driver)
    • 2.方法
      • 1.context_click(element) 右击
      • 2.double_click(element) 双击
      • 3.drag_and_drop(source,target) 拖动
      • 4.move_to_element(element) 悬浮,执行时不要动鼠标
      • 5.perform() 执行,此方法执行以上鼠标所有操作
    • 3.操作步骤
      • 1.定位元素
      • driver.find_element_by_css_selector('#id')
      • 2.实例化对象
      • action = ActionCharins(driver)
      • 3.调用鼠标方法
      • action.context_click(element)
      • 4.执行方法
      • action.perform()

键盘操作

  • 1.导入模块
  • from selenium.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.ENTER) 回车键
    • 6.send_Keys(Keys.CONTROL, ‘a’) 全选ctrl + a
    • 7.send_Keys(Keys.CONTROL, ‘c’) 复制ctrl + c
    • 8.send_Keys(Keys.CONTROL, ‘v’) 粘贴ctrl + v
  • 3.mac系统需要用Command + a 不兼容。

等待元素问题

  • 由于DOM 没有加载出来,所以定位错误。
  • 优先用隐式,再用显示
  • 1.隐式等待
    • driver.implicitly_wait(timeout)
    • 说明:隐式等待,设置为全局(只需要设置一次,就会作用于所有元素,实际最多等待时长:30s。)
    • 缺陷,他需要等待所有页面元素加载完全。
  • 2.显示等待
    • 1.导入包
      • from selenium.webdriver.support.wait import WebDriverWait
    • 2.设置对象
      • WebDriverWait(driver,timeout,poll_frequency=0.5)
      • 参数1driver 浏览器对象
      • 参数2timeout 超时时长,单位秒
      • 参数3poll_frequency 检测时间间隔,默认0.5 秒
    • 3.使用
      • until(method): 直到…时,里面要放函数。
      • 一般使用匿名函数来实现
      • lambda x : x.find_element_by_id('userA')
      • 将find_element_by_id(‘userA’)对象转换为函数。
    • 4.完整案例
      • element = WebDriverWait(driver,10,1).until(lambda x: x.find_element_by_id('userA'))
      • element.send_keys('admin)

下拉框

  • 1.传统方案
    • 直接选择下拉框里面的选项,用css属性选择器。
  • 2.select类选择
    • 导入模块select
    • from selenium.webdriver.support.select import Select
    • 实例化一个对象(需要注意,这里是要找到select标签)
    • select = Select(driver.find_element_by_id('selectA'))
    • 调用方法,用下标进行选择。
    • select.select_by_index(index)
    • select.select_by_value(value)
    • select.select_by_visible_text(text) 用显示文本标记

弹出框问题处理

  • js弹窗类型
    • 1.警告框
    • 2.确认框
    • 3.提示框,输入框
    • 4.同一处理方法。
      • 获取弹窗对象,注意如何代码带有黑线,方法已被移除。
      • alert = drive.switch_to_alert
      • 调用
      • alert.text 返回弹窗文字信息
      • alert.accept() 接受对话框选项
      • alert.dismiss() 取消对话框选项
  • 自定义弹窗
    • 定位元素处理

滚动条处理

  • 执行js脚本
    • 1.编写js代码,其他一样可以使用
    • js = window.scrollTo(0,1000)
    • 2.selenium调用执行javascript执行脚本的方法
    • drive.execute_script(js)

frame切换处理

一般是浏览器里面有两个html,需要切换使用。

  • 1.driver.switch_to.frame(frame_reference) 当前页面
  • frame_reference为name ,id 或者定位到frame元素
  • 2.driver.switch_to.default_content() 恢复当前页面

切换页面

  • selenium 中封装了获取当前窗口的句柄,获取所有窗口的和切换到指定窗口的句柄的方法。
  • 1.driver.current_window_handle 获取当前窗口
  • 2.driver.window_handles 获取所有窗口
  • 3.driver.switch_to_window(handle) 切换到指定窗口。
  • 注意,关闭页面,是关闭的当前页面。
  • 如果想在原始页面使用,务必提前完成窗口切换。

窗口截图

  • driver.get_screenshot_as_file(imgpath)
  • 注意路径,要不名字取好,可以使用时间戳。
  • driver.get_screenshot_as_file(‘./info.png’)
  • 元素截图:
    • btn = driver.find_element_by_tag_name(‘button’)
    • btn.screenshot(‘./btn.png’)

验证码

  • 验证码处理方式
  • 1.去掉验证码 测试环境
  • 2.设置万能验证码 生产环境和测试环境
  • 3.验证码识别技术 python-tesseract来识别图片类型,识别率很难达到100%
  • 4.记录cookie 通过记录cookie

cookie

  • 1.cookie 是什么?
    由服务器生成,并且保存在用户浏览器上的小文件,它可以包含用户相关信息。
  • 2.cookie数据格式?
    键值对
  • 3.cookie产生,客户请求服务器,如果服务器需要记录用户状态,就向客户端浏览器颁发一个cookie数据
  • 4.cookie的使用。
  • 5.拿到BDUSS,在浏览器工作台看
  • {‘name’: BDUSS, ‘value’:‘xjljaiodjflkajoiejkl#$ljlj23’}
  • 代码演示:
  • cookie_value = {‘name’:‘BDUSS’,‘value’:‘xxxx’}
  • driver.add_cookie(cookie_value)
  • driver.refresh() 刷新页面

你可能感兴趣的:(python,前端,自动化)