如何用Rust将内存中的HTML加载到Headless Chrome?
如何用headless_chrome加载内存中的HTML字符串?
我通过Handlebars生成了一段HTML文本,相关代码如下:
let mut handlebars = Handlebars::new(); let source = fs::read_to_string("receipt-template.html").unwrap(); handlebars.register_template_string("t1", source).unwrap(); let mut data = BTreeMap::new(); data.insert("name".to_string(), "世界!".to_string()); // 此变量包含需加载到Headless Chrome的<html>....</html>内容 let html = handlebars.render("t1", &data).unwrap();
但查看headless_chrome库的文档,目前只看到加载外部URL的示例:
let browser = Browser::default()?; let tab = browser.new_tab()?; /// 导航至维基百科 tab.navigate_to("https://www.wikipedia.org")?;
我想知道是否可以直接加载存储在变量/内存中的HTML字符串,就像Node.js里Puppeteer的setContent方法那样:
/// NODE.JS const launchOptions = { executablePath } const browser = await puppeteer.launch(launchOptions) const page = await browser.newPage() await page.setContent(html) // 直接将浏览器内容设为html变量,无需文件
可以的,headless_chrome的Tab结构体提供了set_content方法,能够直接将内存中的HTML字符串加载到页面中,无需先写入文件或部署到服务器。
完整的示例代码如下:
use handlebars::Handlebars; use std::collections::BTreeMap; use std::fs; use headless_chrome::{Browser, LaunchOptions}; fn main() -> Result<(), Box<dyn std::error::Error>> { // 1. 用Handlebars生成HTML let mut handlebars = Handlebars::new(); let source = fs::read_to_string("receipt-template.html").unwrap(); handlebars.register_template_string("t1", source).unwrap(); let mut data = BTreeMap::new(); data.insert("name".to_string(), "世界!".to_string()); let html = handlebars.render("t1", &data).unwrap(); // 2. 启动Headless Chrome并加载HTML let browser = Browser::default()?; let tab = browser.new_tab()?; // 直接加载内存中的HTML字符串 tab.set_content(&html)?; // 后续可执行截图、JS操作等 tab.capture_screenshot(headless_chrome::protocol::cdp::Page::CaptureScreenshotFormatOption::Png, None, None, true)?; Ok(()) }
默认情况下set_content会等待页面所有资源加载完成,若需调整等待策略,可传入额外参数控制加载行为。
内容的提问来源于stack exchange,提问作者DennyHiu
相关产品推荐
相关产品推荐

