1. 项目概述:为什么选择Playwright+Python+VS Code这个黄金组合?
如果你正在寻找一个既能做Web自动化测试,又能做数据抓取,还能做UI交互模拟的“瑞士军刀”,那Playwright绝对是当前最值得投入时间学习的工具之一。它由微软出品,支持Chromium、Firefox和WebKit三大浏览器引擎,这意味着你写的脚本几乎能在所有现代浏览器上运行,而且速度飞快、稳定性高。我最初从Selenium转过来,最大的感受就是“世界清静了”——再也不用为各种浏览器驱动版本不匹配、元素加载等待超时而头疼。
而Python,作为脚本语言里的“万金油”,以其简洁的语法和庞大的生态库,成为了连接Playwright强大能力与开发者之间的最佳桥梁。用Python写Playwright脚本,就像用白话文写指令,直观又好懂。至于VS Code,它早已不是那个简单的文本编辑器了,特别是对Python和Playwright的支持,通过一系列插件,它能让你在编码、调试、运行测试时获得近乎IDE般的流畅体验,大大降低了学习曲线。
所以,今天这篇指南,就是带你从零开始,一步步搭建起这个“Playwright + Python + VS Code”的黄金开发环境。无论你是测试工程师想搞自动化,还是数据分析师想爬点数据,或者是开发者想模拟用户操作,这套环境都是你高效工作的起点。我会把每个步骤的“为什么”讲清楚,并分享一些只有踩过坑才知道的配置技巧。
2. 核心工具安装与基础配置
万事开头难,但把基础打牢了,后面就是一马平川。这一部分我们分三步走:安装Python、安装VS Code、然后进行一些让后续开发更顺手的初始配置。
2.1 Python安装:别只点“下一步”
很多人觉得安装Python就是一路“Next”,但这恰恰是后续很多奇怪问题的根源。我的建议是:永远从Python官网下载安装包。不要去各种软件管家,也不要下那种“绿色版”或“破解版”,官网(python.org)的版本是最干净、最可靠的。
下载时,你会看到两个大版本:Python 3.x 和 Python 2.x。请毫不犹豫地选择3.x的最新稳定版。Python 2早已停止维护,所有现代库(包括Playwright)都不再支持它。
安装过程中,有几个关键选项需要注意:
- “Add Python to PATH”这个复选框,务必勾选!这是最重要的一步。勾选后,系统会自动将Python和它的包管理工具
pip添加到环境变量中。这样,你以后在命令行(CMD或PowerShell)里直接输入python或pip就能用了。如果忘记勾选,后续需要手动配置环境变量,对新手来说比较麻烦。 - 选择“Customize installation”进行自定义安装。在接下来的界面,确保“pip”和“py launcher”是被选中的。pip是Python的包安装器,没有它你寸步难行。py launcher则是一个小工具,让你可以在命令行用
py命令来灵活启动不同版本的Python。 - 选择安装路径。默认是装在C盘,如果你C盘空间紧张,可以换到其他盘,比如
D:\Python39。记住这个路径,但路径中不要包含中文或空格,否则某些依赖库可能会出问题。
安装完成后,需要验证一下。打开你的命令行终端(Windows下按Win+R,输入cmd或powershell后回车),输入以下命令:
python --version或者
py --version如果正确显示了你安装的Python版本号(例如Python 3.11.5),那么恭喜你,第一步成功了。再输入pip --version,确认pip也正常工作。
注意:有些电脑上可能同时存在多个Python版本(比如系统自带的Python 2.7,或者Anaconda里的Python)。当你输入
python时,系统会按照环境变量PATH中的顺序来查找。为了确保我们使用的是刚安装的版本,在上述验证时,使用py --version会更明确,因为py启动器会帮你找到最新安装的Python 3版本。
2.2 VS Code安装与核心插件配置
VS Code的安装同样简单,官网下载,一键安装。安装完成后,我们不是直接写代码,而是先武装我们的编辑器,装上几个能让生产力翻倍的插件。
打开VS Code,侧边栏找到那个方块形的“扩展”图标(或者按Ctrl+Shift+X)。在搜索框里,安装以下插件:
- Python (
ms-python.python):这是微软官方出品Python扩展,是VS Code成为Python神器的核心。它提供了代码智能提示(IntelliSense)、代码格式化、调试、单元测试、Jupyter笔记本支持等几乎所有你需要的功能。安装后重启VS Code生效。 - Playwright Test for VSCode (
ms-playwright.playwright):同样是微软官方出品,专门为Playwright测试量身定做。它能在侧边栏提供一个清晰的测试视图,可以一键运行、调试单个或全部测试,还能录制脚本、查看测试报告和Trace(执行追踪),是Playwright开发的“驾驶舱”。 - Pylance (
ms-python.vscode-pylance):这是一个强大的语言服务器,通常在你安装Python扩展时会推荐你一并安装。它比默认的Jedi提供更准确、更快速的代码补全和类型检查,强烈建议安装。 - (可选但推荐)Code Runner (
formulahendry.code-runner):这个插件可以让你快速运行当前文件或选中的代码段,支持多种语言。对于快速测试一小段Playwright脚本非常方便。
插件装好后,我们还需要进行几项关键的编辑器设置,让它们更好地协作。按Ctrl+,打开设置,在搜索框输入以下设置项进行修改:
Editor: Format On Save:勾选。这样每次保存文件时,VS Code会自动按照Pylance或你设定的规则格式化代码,保持代码风格统一。Python: Terminal Execute In File Dir:勾选。这个设置非常有用,它让Python终端在执行脚本时,自动将工作目录切换到当前文件所在的目录。这样,你的脚本里如果使用了相对路径(比如./screenshot.png),就不会因为工作目录不对而报错了。Python › Analysis: Type Checking Mode:可以设置为basic或off。对于新手,我建议先设为off,避免过于严格的类型检查带来大量错误提示,影响学习信心。等项目复杂了再开启basic进行基础检查。
2.3 终端与虚拟环境:为项目打造独立沙箱
接下来是很多新手会忽略,但资深开发者极其重视的一环:虚拟环境(Virtual Environment)。
你可以把虚拟环境理解为一个项目的“独立沙箱”。在这个沙箱里安装的Python包(比如Playwright),只对这个项目生效,不会影响到系统全局或其他项目。这样做的好处太多了:不同项目可以使用不同版本的Playwright或其他库,避免版本冲突;当你需要把项目分享给别人或部署到服务器时,可以轻松地复现完全一致的运行环境。
在VS Code中创建和使用虚拟环境非常方便。首先,在你计划存放项目的文件夹里,新建一个文件夹,比如my_playwright_project。然后用VS Code打开这个文件夹(文件->打开文件夹)。
接着,按`Ctrl+``(反引号键)打开VS Code的集成终端。在终端里,输入以下命令来创建一个虚拟环境:
python -m venv venv这个命令会在当前项目目录下创建一个名为venv的文件夹,里面就是独立的Python环境。
创建好后,需要激活这个环境。激活方式因操作系统而异:
- Windows (PowerShell):在终端输入
.\venv\Scripts\Activate.ps1。如果遇到执行策略错误,可以先以管理员身份运行PowerShell,执行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser,然后再激活。 - Windows (CMD):在终端输入
venv\Scripts\activate.bat。 - macOS/Linux:在终端输入
source venv/bin/activate。
激活成功后,你会看到终端提示符前面多了一个(venv)标记,这表示你现在已经在这个虚拟环境里了。之后所有pip install的操作,都只会影响这个环境。
实操心得:我强烈建议你为每一个Playwright项目都创建独立的虚拟环境。一个常见的坏习惯是在系统全局环境里安装所有包,一旦某个包升级导致旧项目报错,排查起来会非常痛苦。虚拟环境是Python开发的最佳实践,从一开始就养成这个习惯。
3. Playwright核心环境部署
基础环境搭好了,现在轮到主角Playwright登场。我们将安装Playwright的Python库,并让它把需要的浏览器也“请”到你的电脑上。
3.1 安装Playwright Python库
确保你的终端已经激活了虚拟环境(前面有(venv))。在VS Code的终端里,输入安装命令:
pip install playwrightpip会自动从Python官方的包索引(PyPI)下载Playwright库及其依赖。安装过程可能会持续一两分钟,取决于你的网络速度。
安装完成后,可以验证一下:
pip show playwright这个命令会显示已安装的Playwright版本等信息。或者,你也可以在Python交互模式里快速验证:
python -c “import playwright; print(playwright.__version__)”3.2 安装浏览器二进制文件:解决“下载慢”的坑
Playwright的强大在于它直接“自带”浏览器,而不是依赖你系统里安装的Chrome或Edge。这保证了测试环境的一致性。所以,安装完库之后,还需要安装浏览器本体。
执行以下命令:
playwright install这个命令会下载Chromium、Firefox和WebKit(Safari的引擎)的二进制文件。这里可能是你遇到的第一个“坑”:由于网络原因,下载速度可能会非常慢,甚至失败。
解决方案与技巧:
- 使用镜像源(推荐):Playwright支持通过环境变量指定下载镜像。对于国内用户,可以设置阿里云或腾讯云的镜像来加速。在执行安装命令前,先在终端设置环境变量(以下命令针对Chromium,你也可以把
chromium换成firefox或webkit):- Windows (PowerShell):
$env:PLAYWRIGHT_DOWNLOAD_HOST=”https://npmmirror.com/mirrors/playwright” playwright install chromium - macOS/Linux:
PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright playwright install chromium
- Windows (PowerShell):
- 分批安装:如果你不需要所有浏览器,可以只安装你需要的。比如,大部分场景下Chromium就足够了。
playwright install chromium - 手动下载(终极方案):如果镜像源也慢,可以去Playwright的GitHub Release页面找到对应版本的浏览器包,手动下载后放到指定目录。但这个方法比较繁琐,不推荐新手尝试。
安装成功后,这些浏览器会存放在用户目录下的一个缓存文件夹里(例如Windows在%USERPROFILE%\AppData\Local\ms-playwright),你的Python脚本可以直接调用,非常方便。
3.3 验证安装:编写并运行第一个脚本
理论说再多,不如跑一遍。让我们写一个最简单的脚本来验证整个环境是否工作正常。
在VS Code的项目文件夹里,新建一个Python文件,命名为first_test.py。输入以下代码:
import asyncio from playwright.async_api import async_playwright async def main(): # 启动Playwright,它负责管理浏览器 async with async_playwright() as p: # 启动一个Chromium浏览器实例,headless=False表示显示界面 browser = await p.chromium.launch(headless=False) # 创建一个新的页面(标签页) page = await browser.new_page() # 导航到百度首页 await page.goto(“https://www.baidu.com”) # 等待3秒,方便我们观察 await page.wait_for_timeout(3000) # 关闭浏览器 await browser.close() # 运行异步主函数 asyncio.run(main())保存文件后,在终端(确保仍在虚拟环境venv中)运行它:
python first_test.py如果一切顺利,你会看到一个Chromium浏览器窗口自动打开,跳转到百度首页,停留3秒后关闭。恭喜你,你的Playwright Python环境已经成功运行!
注意事项:上面的示例使用了
async/await异步编程模式,这是Playwright推荐的方式,能获得更好的性能。如果你对异步不熟悉,Playwright也提供了同步API,代码更直观。只需将导入改为from playwright.sync_api import sync_playwright,并去掉所有的async和await关键字即可。但对于复杂的、需要同时操作多个页面的场景,异步模式优势明显。
4. VS Code深度集成与效率提升
环境能跑通只是第一步,接下来我们要让VS Code和Playwright深度融合,把开发调试的效率拉到最高。官方插件Playwright Test for VSCode在这里扮演了关键角色。
4.1 测试侧边栏(Testing Sidebar)的使用
安装好Playwright插件后,VS Code左侧活动栏会多出一个“烧杯”图标,这就是测试视图。但这里有个关键点:这个测试视图主要针对使用playwright test运行器编写的测试用例。
Playwright提供了两套API:
- Library API:就是我们上面例子用的,直接
import playwright,像写普通Python脚本一样写自动化逻辑。灵活,适合各种自动化任务。 - Test Runner API:使用
playwright test命令和一套特定的结构(如test_开头的函数,使用expect断言)来编写和组织测试用例。更适合系统性的测试项目。
插件对Test Runner的支持是完美的。如果你用playwright test初始化一个项目(命令是playwright init),插件会自动扫描项目中的测试文件,在测试侧边栏清晰列出所有测试套件和用例。你可以点击旁边的播放按钮单独运行某个测试,所有结果一目了然。
对于使用Library API的脚本,测试侧边栏可能不会直接识别。但这不代表插件没用,它的其他功能依然强大。
4.2 调试配置(launch.json)详解
调试是开发中不可或缺的一环。Playwright脚本的调试,主要是为了设置断点、查看变量、单步执行,从而定位脚本为什么没按预期工作。
我们需要在VS Code中创建一个调试配置。点击左侧的“运行和调试”图标(或按Ctrl+Shift+D),然后点击“创建一个launch.json文件”,选择“Python”。VS Code会在项目根目录的.vscode文件夹下生成一个launch.json文件。
将内容替换为以下配置:
{ “version”: “0.2.0”, “configurations”: [ { “name”: “Python: Debug Playwright Script”, “type”: “python”, “request”: “launch”, “program”: “${file}”, // 调试当前打开的文件 “console”: “integratedTerminal”, “justMyCode”: false, // 重要:设为false才能进入Playwright库内部调试 “env”: { “PWDEBUG”: “1” // 可选:开启Playwright的调试模式,会放慢速度并打开追踪 } }, { “name”: “Playwright: Run Current Test”, “type”: “python”, “request”: “launch”, “module”: “pytest”, // 如果你用pytest运行Playwright Test “args”: [ “${file}”, “-v”, “--headed” // 有头模式运行,方便观察 ], “console”: “integratedTerminal” } ] }现在,打开你的first_test.py文件,在await page.goto(...)这一行左侧的行号处点击,设置一个红色断点。然后按F5键启动调试。程序会在断点处暂停,此时你可以:
- 查看变量:在左侧“变量”窗口,可以看到
page等所有局部变量的当前状态。 - 单步执行:使用工具栏的
F10(单步跳过)、F11(单步进入)来一步步执行代码。 - 调试控制台:在“调试控制台”里,你可以输入Python表达式来实时查看或修改变量的值,比如输入
page.url查看当前页面URL。
“justMyCode”: false这个设置非常关键,它允许调试器深入到Playwright的库代码中去。当你想了解page.click()内部到底做了什么时,就可以用F11步进去看。
4.3 代码录制(Codegen)与定位器拾取(Pick Locator)
对于初学者,或者面对一个复杂页面不知如何下手时,Playwright的录制功能是“开挂”般的存在。
1. 使用命令行录制:在终端输入:
playwright codegen https://www.baidu.com这会同时打开一个浏览器窗口和一个代码生成器窗口。你在浏览器里的所有操作(点击、输入、滚动)都会被实时转换成Python代码,显示在代码生成器里。你可以直接复制这些代码到你的脚本中。
2. 使用VS Code插件录制:如果你使用的是Playwright Test格式,在测试侧边栏顶部有一个“Record new”按钮。点击它会启动浏览器进行录制,录制结束后会自动生成一个test_*.spec.py文件。
3. 定位器拾取(Pick Locator):这是比录制更精准的功能。当你在写代码,不确定某个按钮的定位器怎么写时,可以:
- 在测试侧边栏底部找到“Pick Locator”按钮并点击。
- 或者,在代码编辑器中,将光标放在任何地方,按
Ctrl+Shift+P打开命令面板,输入“Playwright: Pick Locator”。
此时会弹出一个浏览器窗口,你将鼠标移动到页面元素上,它会高亮显示,同时在VS Code里会实时显示推荐的最佳定位器(如page.get_by_role(“button”, name=“Submit”))。按Enter键即可复制到剪贴板。
实操心得:录制生成的代码是一个很好的起点,但不要完全依赖它。录制出来的代码往往包含大量
page.locator(“div:nth-child(3) > button”)这类基于DOM结构的脆弱定位器,页面结构一变就失效。你应该利用录制功能理解操作步骤,然后手动将定位器优化为更稳定的方式,比如使用get_by_role、get_by_text、get_by_test_id等语义化定位器。插件提供的“Pick Locator”功能通常会优先推荐这些稳定的定位方式。
5. 项目结构优化与常用工作流
环境搭好了,工具也会用了,现在我们来谈谈如何组织一个真正可维护、可扩展的Playwright项目。一个好的项目结构能让你和你的团队长期受益。
5.1 初始化一个标准的Playwright Test项目
虽然我们可以自己创建文件夹,但使用官方工具初始化是最佳实践。在项目根目录(确保在虚拟环境中)执行:
playwright init这个交互式命令会问你几个问题,比如项目语言(选Python)、是否要加.gitignore文件等。完成后,你会得到一个结构清晰的项目:
my_playwright_project/ ├── .gitignore ├── playwright.config.py # Playwright主配置文件 ├── requirements.txt # Python依赖列表 ├── tests/ # 存放测试用例的目录 │ ├── example.spec.py # 示例测试文件 │ └── pages/ # (可自建)页面对象模型目录 ├── fixtures/ # (可自建)自定义夹具目录 └── utils/ # (可自建)工具函数目录playwright.config.py是这个项目的核心,你可以在这里配置默认使用哪个浏览器、是否无头运行、超时时间、截图保存路径、全局的登录状态等等。花点时间熟悉这个配置文件是值得的。
5.2 编写可维护的测试脚本:页面对象模型(POM)
当你有超过10个测试用例时,如果每个用例都直接写page.goto(...); page.click(...); page.fill(...),代码会迅速变得难以维护。页面对象模型(Page Object Model, POM)是一种设计模式,它将每个页面的元素定位和操作封装成一个类。
例如,为百度首页创建一个页面对象pages/baidu_page.py:
from playwright.sync_api import Page class BaiduPage: def __init__(self, page: Page): self.page = page self.search_box = page.locator(“#kw”) # 搜索框 self.search_button = page.locator(“#su”) # “百度一下”按钮 def navigate(self): self.page.goto(“https://www.baidu.com”) def search(self, keyword: str): self.search_box.fill(keyword) self.search_button.click()然后在你的测试用例中,这样使用:
from playwright.sync_api import expect from pages.baidu_page import BaiduPage def test_baidu_search(page): baidu = BaiduPage(page) baidu.navigate() baidu.search(“Playwright”) # 使用Playwright Test的断言 expect(page).to_have_title(“Playwright_百度搜索”)这样做的好处是:如果百度首页的搜索框ID从#kw改成了#search,你只需要在BaiduPage类里修改一处,所有用到这个搜索框的测试用例都自动修复了。
5.3 常用命令与脚本自动化
把一些常用操作写成脚本或配置在package.json(如果是Node.js项目)或pyproject.toml的[tool.taskipy]部分(Python项目),可以极大提升效率。
一些你一定会用到的命令:
playwright test:运行所有测试。playwright test tests/login.spec.py:运行指定测试文件。playwright test --grep “search”:运行包含“search”关键词的测试。playwright test --headed:在有图形界面的模式下运行测试(调试时非常有用)。playwright test --project=chromium:只使用Chromium浏览器运行测试。playwright show-report:打开上次测试运行的HTML报告。这个报告非常精美,包含了每个测试的通过状态、耗时、截图甚至执行视频。playwright codegen:启动录制工具。
你可以在VS Code的tasks.json中定义任务,或者直接使用终端的历史命令功能。更专业的做法是使用pytest这类测试框架来管理用例,并集成到CI/CD流水线中。
6. 常见问题排查与性能调优
即使环境搭建顺利,在实际编写和运行脚本时,你也一定会遇到各种各样的问题。这里我总结了一些高频问题的排查思路和解决方法。
6.1 环境与依赖问题
问题1:运行playwright命令提示“不是内部或外部命令”
- 原因:Playwright的CLI工具没有正确安装或不在PATH中。
- 解决:首先确认你是否在激活的虚拟环境(
venv)中。在虚拟环境中,playwright命令应该是可用的。如果不行,尝试重新安装:pip install playwright,然后再次运行playwright install。
问题2:ModuleNotFoundError: No module named ‘playwright’
- 原因:Python解释器没有找到playwright模块。
- 解决:
- 确认你是在安装Playwright的虚拟环境中运行脚本。检查终端提示符前是否有
(venv)。 - 在VS Code中,检查右下角状态栏选择的Python解释器是否正确。点击状态栏的Python版本,选择指向你项目
venv文件夹下的解释器(如./venv/Scripts/python.exe)。
- 确认你是在安装Playwright的虚拟环境中运行脚本。检查终端提示符前是否有
问题3:浏览器启动失败,报错类似Executable doesn‘t exist at ...
- 原因:浏览器二进制文件没有下载成功或损坏。
- 解决:删除Playwright的浏览器缓存目录(如Windows的
%USERPROFILE%\AppData\Local\ms-playwright),然后重新运行playwright install --force(--force参数强制重新下载)。
6.2 脚本运行与稳定性问题
问题4:元素找不到(TimeoutError: Timeout 30000ms exceeded)
- 原因:这是最常见的问题。脚本执行太快,页面元素还没加载出来就去操作了。
- 解决:
- 优先使用智能等待:Playwright的绝大多数操作(如
click,fill)内部自带等待机制,会等待元素可操作。确保你使用的是这些API。 - 显式等待:在关键操作前,使用
page.wait_for_selector(“selector”)或page.wait_for_function()等待特定条件满足。 - 调整超时时间:在
playwright.config.py中全局增加timeout,或在具体操作中传入timeout参数,如page.click(“button”, timeout=10000)。 - 检查定位器:使用VS Code插件的“Pick Locator”功能重新确认你的定位器是否准确。页面结构可能已发生变化。
- 优先使用智能等待:Playwright的绝大多数操作(如
问题5:脚本在无头模式下运行正常,但--headed模式下失败
- 原因:有头模式受实际屏幕尺寸、缩放比例、浏览器插件等影响。
- 解决:
- 在配置中或启动浏览器时,固定视窗大小:
browser.new_page(viewport={‘width’: 1920, ‘height’: 1080})。 - 检查是否有浏览器插件干扰。可以尝试以无痕模式启动:
browser.launch(args=[“--incognito”])。
- 在配置中或启动浏览器时,固定视窗大小:
问题6:如何处理登录/验证码?
- 原因:自动化测试遇到验证码是一个经典难题。
- 解决:
- 最佳实践:联系开发团队,在测试环境中关闭验证码,或提供万能验证码。
- Cookie/状态复用:首次手动登录后,使用
page.context.storage_state(path=“state.json”)保存登录状态。后续测试用browser.new_context(storage_state=“state.json”)来恢复状态,绕过登录。 - 第三方服务(谨慎):对于必须处理验证码的情况,可以考虑付费的验证码识别服务API,但这会增加复杂性和成本。
6.3 性能与最佳实践
1. 浏览器上下文(Context)优于多个浏览器实例启动一个浏览器实例开销很大。应该在一个浏览器实例下创建多个浏览器上下文(browser.new_context())。每个上下文拥有独立的会话、cookies和缓存,但共享浏览器进程,资源占用少,隔离性好。
2. 合理使用同步与异步API
- 同步API:代码直观,易于理解和调试,适合线性任务和初学者。使用
from playwright.sync_api import sync_playwright。 - 异步API:性能更高,适合需要同时处理多个页面或任务的复杂场景。使用
from playwright.async_api import async_playwright和asyncio。注意:不要在同一个脚本中混用两种API。
3. 利用Trace和视频进行调试当测试失败时,光看日志很难定位。在playwright.config.py中配置trace: ‘on-first-retry’和video: ‘on-first-retry’。这样,失败的测试会在重试时记录详细的Trace文件和视频。通过playwright show-trace trace.zip命令打开Trace文件,你可以清晰地看到每一步操作、网络请求、控制台日志,是排查问题的神器。
4. 定位器策略:稳定高于一切避免使用page.locator(“div > div > button:nth-child(3)”)这种基于绝对路径的脆弱定位器。优先使用以下稳定策略:
- 语义化定位器:
page.get_by_role(“button”, name=“提交”) - 文本定位器:
page.get_by_text(“登录”) - 测试ID定位器:
page.get_by_test_id(“login-submit”)(需要开发在元素上添加>
Flink DataStream API vs Flink SQL:核心异同对比
一、编译链路对比二、多维度对比维度DataStream APIFlink SQL抽象层次命令式(HOW:告诉引擎怎么做)声明式(WHAT:告诉引擎做什么)优化空间用户手动优化逻辑优化器自动选择最优策略前端编译无(直接…
以主站为参考时钟实现主从DC同步方案及原理深度剖析(3):计算从站传输延时
2.计算从站传输延时 2.1 ESC端口组成 想要计算从站的传输延时,必须要先对从站ESC有所了解。 ESC具有四个数据收发端口,每个端口都可以收发以太网数据帧。数据帧在ESC内部的传输顺序是固定的,如下图所示。通常,数据从端口0进入ESC,然后按照端口3→端口1→端口2→端口0的…
OpenRGB终极指南:3步免费统一控制所有RGB设备灯光的完整教程
OpenRGB终极指南:3步免费统一控制所有RGB设备灯光的完整教程 【免费下载链接】OpenRGB Open source RGB lighting control that doesnt depend on manufacturer software. Supports Windows, Linux, MacOS. Mirror of https://gitlab.com/CalcProgrammer1/OpenRGB. …
算法学习笔记:排序算法
算法学习笔记:排序算法 【免费下载链接】obsidian-jupyter 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-jupyter 冒泡排序实现 算法原理:通过相邻元素比较和交换实现排序 def bubble_sort(arr):"""冒泡排序实现&quo…
2026年自学大模型的核心技术与实战指南
1. 为什么2026年还需要自学大模型? 2026年的大模型领域可能会让很多初学者感到困惑——明明各种AI工具已经高度集成化,为什么还要从底层学起?我去年辅导过一位转行AI的产品经理,她最初也认为"直接调用API就够了"&#x…
OEXN:“闲置现金收益再受关注”
Yahoo Finance 报道称,投资账户中的闲置现金在不同券商平台上收益差异明显,Vanguard、Schwab 和 Fidelity 的标准现金选项近期收益约在 3.29% 至 3.58% 之间,OEXN表示,现金管理已成为波动市况下投资组合回报的重要细节。文章同时提…