• 【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()
        
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6

    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() 刷新页面
  • 相关阅读:
    小索引大力量,记一次explain的性能优化经历
    本地pycharm连接到远程服务器(超级详细)
    【人工智能与机器学习】——线性回归、逻辑回归与分类评价指标(学习笔记)
    [数组中等题] LeetCode 969. 煎饼排序
    【C++进阶】:AVL树(平衡因子)
    Vue前端模板框架--vue-admin-template
    C#winform导出DataGridView数据到Excel表
    基于vue框架的4S店汽车维修保养管理系统28a7y(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
    【Mysql】
    flume的安装配置笔记
  • 原文地址:https://blog.csdn.net/qq_44152977/article/details/126704587