大数跨境
0
0

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

nodriver - Python自动化测试驱动的网络交互革新利器 AllTests软件测试
2025-09-08
0
导读:nodriver通过相对简洁的界面,提供了更高级别的网页抓取和浏览器自动化功能。它是Python包Undetected-Chromedriver的官方继任者。无需再使用webdriver,也无需再使用
1、前言

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


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



2、简介

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


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

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

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

已知可兼容以下浏览器:ChromiumChromeEdgeBrave


功能特性:

  • 无需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、简单示例:

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、完整示例:

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

文章合集-2024

文章合集-2023

文章合集-2022

文章合集-2021

文章合集-2020


扫码关注

获取更多精彩

alltests


扫描作者微信,交流、进群、合作!

【声明】内容源于网络
0
0
AllTests软件测试
分享软件测试、自动化测试、性能测试、测试开发等技术文章与资源,欢迎关注!
内容 246
粉丝 0
AllTests软件测试 分享软件测试、自动化测试、性能测试、测试开发等技术文章与资源,欢迎关注!
总阅读16
粉丝0
内容246