• selenium 自动化测试


    selenium 是最广泛使用的开源Web UI(用户界面)自动化测试套件之一。selenium测试脚本可以使用任何支持的编程语言进行编码,并且可以直接在大多数现代Web浏览器中运行。在爬虫领域selenium同样是一把利器,能够解决大部分的网页的反爬问题。

    一、selenium 安装

    pip install selenium
    
    • 1

    二、安装浏览器驱动

    针对不同的浏览器,需要安装不同的驱动
    以谷歌为例,安装chromedriver,下载到python环境目录下
    针对本机浏览器版本,选择对应的chromedriver版本
    https://registry.npmmirror.com/binary.html?path=chromedriver/

    from selenium import webdriver
    
    # 不自动关闭浏览器
    option = webdriver.ChromeOptions()
    option.add_experimental_option('detach',True)
    
    # 将option作为参数添加到Chrome中
    driver = webdriver.Chrome(chrome_option = option)
    driver.get('https://www.csdn.net/')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    三、元素定位

    id

    driver.find_element_by_id( id )
    
    • 1

    name

    driver.find_element_by_name( name )
    
    • 1

    class

    driver.find_element_by_class_name( class )
    
    • 1

    tag

    driver.find_element_by_tag_name( div )
    
    • 1

    xpath

    driver.find_element_by_xpath(  )
    
    • 1

    link 专门用来定位文本链接

    driver.find_element_by_link_text( 文本 )
    
    • 1

    partial_link 部分链接 对于文本很长时,可以只定义部分文本

    driver.find_element_by_partial_link_text( 文本 )
    
    • 1

    定位一组元素使用的方法只需将 element 改为 elements 即可

    四、浏览器控制

    1、修改浏览器窗口大小
    webdriver 提供 set_window_size() 方法来修改浏览器窗口的大小
    maximize_window() 方法可以实现全屏显示
    
    2、浏览器前进&后退
    webdriver 提供 forward()back() 方法来实现页面前进和后退
    
    3、浏览器刷新
    driver.refresh()
    
    4、浏览器窗口切换
    driver.switch_to.window(window[-1])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    五、常见操作

    webdriver中的常见操作有:
    send_keys()		模拟输入指定内容
    clear()			清除文本内容
    is_displayed()	判断该元素是否可见
    get_attribute()	获取标签属性值
    size			返回元素的的尺寸
    text			返回元素文本
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    六、鼠标控制

    在webdriver中,鼠标操作被封装在ActionChains类中

    click()		左单击
    context_click()		右单击
    double_click()		双击
    drag_and_drop()		拖动
    move_to_element()	鼠标悬停
    perform()			执行所有ActionChains中存储的动作
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    七、键盘控制

    webdriver中keys类几乎提供了键盘上所有的按键方法,可以用send_keys+keys 实现输出键盘上都得组合按键如“Ctrl + C”

    八、设置元素等待

    webdriver中的等待分为 显式等待 & 隐式等待

    显示等待
    WebDriverWait( driver, timeout, poll_frequency, ignored_exceptions )

    driver:浏览器驱动
    timeout:超出时间,单位秒
    poll_frequency:每次检测的间隔时间
    ignored_exceptions:指定忽略的异常,如果调用until或者until_not的过程中抛出指定忽略的异常,则不中断代码

    隐式等待
    implicitly_wait()

    强制等待
    time.sleep()
    设置固定的休眠时间,对于代码的运行效率会有影响

    九、表单切换

    很多页面也会用带frame/iframe表单嵌套,对于这种内嵌的页面selenium是无法直接定位的,需要使用 switch_to.frame() 方法将当前的对象切换成 frame/iframe 内嵌的页面

    十、弹窗处理

    alert()、confirm()、prompt()

    处理方式:先定位(switch_to.alert 自动获取当前弹窗),再使用text、accept、dismiss、send_keys等方法进行操作

    text 获取弹窗文案
    accept 确认
    dismiss 取消
    send_keys 发送文本至警告框

    十一、上传 & 下载

    1、上传
    常见的web页面的上传,一般使用 input 或者 (JavaScript、Ajax),对于 input 可以直接使用send_keys( url ) 来上传

    2、下载
    Chrome浏览器下载文件,需要通过add_experimental_option 添加 prefs 参数。
    download.default_directory: 设置下载路径
    profile.default_content_settings.popups: 0 禁止弹出窗口

    十二、cookies操作

    cookie 是识别用户登录与否的关键,爬虫中常用selenium + request 实现cookie持久化,即先用selenium模拟登录获取cookie,在通过request携带cookie进行请求。

    webdriver 提供 cookie 的几种操作:读取、添加、删除。

    get_cookies:以字典的形式返回当前会话中可见的cookie信息。
    get_cookie(name):返回cookie字典中 key == name 的 cookie 信息。
    add_cookie(cookie_dict):将cookie添加到当前会话中
    delete_cookie(name):删除指定的名称的单个cookie
    delete_all_cookies():删除会话内的所有cookie
    
    • 1
    • 2
    • 3
    • 4
    • 5

    十三、调用JavaScript

    webdriver对于滚动条的处理需要用到JavaScript,同时也可以想textarea文本框输入文本(webdriver只能定位,不能输入文本),webdriver中使用execute_script方法实现JavaScript的执行

    js = "window.scrollTo(0,5000);"
    driver.extcute_script( js )
    
    • 1
    • 2

    十四、其他操作

    1、关闭所有页面
    driver.quit()

    2、关闭当前页面
    driver.close()

    3、对当前页面截图
    webdriver 中使用 get_screenshot_as_file() 对当前页面进行截图,对页面截图这一功能,主要用再测试时记录报错页面的,可以将try except结合 get_screenshot_as_file()一起使用

    十五、常用的方法总结

    # 获取当前页面 URL
    driver.current_url
    
    # 获取当前 html源码
    driver.page_source
    
    # 获取当前页面标题
    driver.title
    
    # 获取浏览器名称
    dirver.name
    
    # 对页面进行截图,返回二进制数据
    driver.get_screenshot_as_png()
    
    # 设置浏览器尺寸
    driver.get_window_size()
    
    # 获取浏览器尺寸,位置
    driver.get_window_rect()
    
    # 获取浏览器位置(左上角)
    driver.get_window_position()
    
    # 设置浏览器尺寸
    driver.set_window_size(width=1000,height=600)
    
    # 设置浏览器位置(左上角)
    driver.set_window_postion(x=5000,y=600)
    
    # 设置浏览器尺寸,位置
    driver.get_window_rect(x=200, y=400, width=1000, height=600)
    
    • 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
  • 相关阅读:
    Nacos集群配置以及在springboot中使用
    操控xls文件的jxl包下载
    使用mqtt.fx向EMQX服务器发送消息
    C# Socket
    minicom使用记录及ubuntu配置IP地址
    Redis+token实现接口幂等性
    JS案例:实现一个简易版axios
    python---生成器表达式
    HTML是指什么 HTML的基本工作原理
    IDEA插件开发(13)---Dynamic Plugins
  • 原文地址:https://blog.csdn.net/qq_46177396/article/details/127767031