use headless_chrome::{Browser, protocol::{target::methods::CreateTarget ,page::ScreenshotFormat}};
pub enum OutputFormat {PNG, JPG, PDF}
pub fn screenshot_tab(
url: &str,
format: OutputFormat,
quality: u8,
visible_only: bool,
width: u16,
height: u16,
element: &str)
-> Result<Vec<u8>, failure::Error>
{
let browser = Browser::default()?;
let tab = browser.new_tab_with_options(CreateTarget {
url: url,
width: Some(width.into()),
height: Some(height.into()),
browser_context_id: None,
enable_begin_frame_control: None,
})?;
tab.navigate_to(url)?;
tab.wait_until_navigated()?;
if element.is_empty() != true {
tab.wait_for_element(element)?;
}
match format {
OutputFormat::JPG => {
return Ok(tab.capture_screenshot(
ScreenshotFormat::JPEG(Some(quality.into())), None, !visible_only)?);
},
OutputFormat::PNG => return Ok(tab.capture_screenshot(
ScreenshotFormat::PNG, None, !visible_only)?),
OutputFormat::PDF => return Ok(
tab.print_to_pdf(None)?),
};
}
pub fn write_screenshot(
output_path: &str,
img_data: Vec<u8>)
-> Result<(), failure::Error>
{
std::fs::write(output_path, img_data)?;
return Ok(())
}