You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Rust Playwright crate实现文件下载:代码补全求助

Rust Playwright 实现文件下载的完整方案

你的代码已经完成了初始化浏览器、打开页面、触发下载并捕获下载事件的核心步骤,只需要补充下载文件的保存逻辑,并优化部分冗余代码即可完成功能。以下是修改后的完整可运行代码及关键说明:

完整代码

use playwright::{Playwright, api::Download};
use tokio;
use std::path::Path;

#[tokio::main]
async fn main() -> Result<(), playwright::Error> {
    // 初始化Playwright并安装浏览器
    let playwright = Playwright::initialize().await?;
    playwright.prepare()?;
    
    // 启动浏览器并创建上下文、页面
    let chromium = playwright.chromium();
    let browser = chromium.launcher().headless(false).launch().await?;
    let context = browser.context_builder().build().await?;
    let page = context.new_page().await?;
    
    // 打开目标页面
    page.goto_builder("https://demoqa.com/upload-download").goto().await?;

    // 触发下载并捕获下载事件
    page.click_builder("a:has-text(\"Download\")").click().await?;
    let my_download = page.expect_event(playwright::api::page::EventType::Download).await?;

    // ---------- 补充的核心保存逻辑 ----------
    // 获取网站推荐的文件名
    let suggested_filename = my_download.suggested_filename().await?;
    println!("准备下载文件: {}", suggested_filename);

    // 方式1:保存到指定路径(比如当前目录下的downloads文件夹)
    let save_path = Path::new("./downloads").join(suggested_filename);
    // 确保目标目录存在
    std::fs::create_dir_all("./downloads").unwrap_or_default();
    my_download.save_as(&save_path).await?;

    // 方式2:直接获取浏览器默认下载路径的文件(可选,无需手动保存)
    // let default_path = my_download.path().await?;
    // println!("文件已下载到默认路径: {}", default_path.display());
    // ---------- 保存逻辑结束 ----------

    // 关闭浏览器
    browser.close().await?;

    Ok(())
}

关键补充说明

  • 保存文件的核心方法:
    • suggested_filename():获取网站提供的推荐文件名,避免手动命名的麻烦。
    • save_as(path):将下载的文件保存到指定路径,需确保目标目录存在(可通过std::fs::create_dir_all创建目录)。
    • path():若不需要手动指定路径,可通过此方法获取浏览器默认下载目录的文件路径。
  • 移除冗余的超时等待:page.wait_for_timeout完全不需要,save_as和path方法会自动等待下载完成后再执行。
  • 规范错误处理:将代码中的expect("")替换为?,让错误正常向上传递,符合Rust错误处理的最佳实践。

内容的提问来源于stack exchange,提问作者Paulo Luvisoto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:20:55