首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >nodriver - Python自动化测试驱动的网络交互革新利器

nodriver - Python自动化测试驱动的网络交互革新利器

作者头像
wangmcn
发布2025-10-13 09:59:22
发布2025-10-13 09:59:22
3490
举报
文章被收录于专栏:AllTests软件测试AllTests软件测试

1、前言

在Python的网络自动化测试领域,Selenium曾是当之无愧的明星工具,以模拟浏览器操作闻名,广泛应用于UI自动化测试场景。它通过驱动浏览器模拟真实用户操作,能精准测试网页功能的交互逻辑,在验证网页元素可见性、点击事件响应等方面表现出色。但随着技术演进,面对大规模自动化测试任务时,Selenium启动浏览器带来的资源消耗和执行效率问题逐渐凸显。

此时,nodriver工具包凭借独特优势崭露头角。这款无需浏览器驱动即可实现高效网络交互的工具包,为自动化测试带来了全新思路。nodriver无需加载整个浏览器环境,以轻量、快速的特性,能够直接模拟HTTP/HTTPS请求,极大提升测试效率,减少资源占用,提供了更灵活、高效的自动化测试解决方案。

2、简介

nodriver通过相对简洁的界面,提供了更高级别的网页抓取和浏览器自动化功能。它是Python包Undetected-Chromedriver的官方继任者。无需再使用webdriver,也无需再使用selenium。

直接通信能更好地抵御Web应用防火墙(WAF),同时性能也能得到极大提升。与undetected-chromedriver不同,该模块是完全异步的。

nodriver与其他知名包的不同之处在于,它经过优化,能够避开大多数反机器人解决方案的检测。

另一个重点是易用性和快速原型开发,因此很多功能都能“即开即用”,大多数方法参数都设有最佳实践默认值。只需1到2行代码,就能启动运行,并默认提供最佳实践配置。它会在之后清理创建的文件(配置文件)。

已知可兼容以下浏览器:Chromium、Chrome、Edge、Brave

功能特性:

  • 无需chromedriver二进制文件或Selenium依赖。
  • 一行代码即可启动运行。
  • 每次运行使用全新配置文件,退出时自动清理。
  • 将Cookie保存到文件并加载,避免重复繁琐的登录步骤。
  • 智能高效的元素查找功能,支持通过选择器或文本查找,包括iframe内容。这也可用作元素出现的等待条件,因为它会在超时前持续重试查找。因此,await tab.select('body')可作为页面是否加载完成的判断依据。find方法通过文本查找,但不会简单返回第一个匹配元素,而是根据文本长度最接近的候选元素进行匹配(最短的优先),这使得像tab.find('accept all')这样的查找能返回实际的Cookie按钮,而非页眉中的脚本。
  • 可连接到正在运行的Chrome调试会话。
  • 元素的描述性__repr__,以HTML形式呈现元素。
  • 实用函数,可将运行中的undetected_chromedriver.Chrome实例转换为nodriver.Browser实例并继续操作。
  • 内置大量辅助工具和实用方法,适用于大多数常用及重要操作。

安装:

  • 由于它是undetected-chromedriver的一部分,安装方式为:

pip install undetected-chromedriver

  • 或者通过以下方式作为一个单独的包:

pip install nodriver

Github地址:

https://github.com/UltrafunkAmsterdam/nodriver

3、快速上手

1、简单示例:

代码语言:javascript
复制
import nodriver as uc

async def main():

    browser = await uc.start()
    page = await browser.get('https://www.nowsecure.nl')

    # ... 更多代码 ...

if __name__ == '__main__':
    uc.loop().run_until_complete(main())

2、完整示例:

代码语言:javascript
复制
import nodriver

asyncdef main():

    browser = await nodriver.start()
    page = await browser.get('https://www.nowsecure.nl')

    await page.save_screenshot()
    await page.get_content()
    await page.scroll_down(150)
    elems = await page.select_all('*[src]')

    for elem in elems:
        await elem.flash()

    page2 = await browser.get('https://baidu.com', new_tab=True)
    page3 = await browser.get('https://ultrafunkamsterdam.github.io/nodriver/index', new_window=True)

    for p in (page, page2, page3):
       await p.bring_to_front()
       await p.scroll_down(200)
       await p 
       await p.reload()
       if p != page3:
           await p.close()

if __name__ == '__main__':
    nodriver.loop().run_until_complete(main())

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AllTests软件测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档