Skip to content
No description, website, or topics provided.
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
examples Remove examples/real_world and dependencies Mar 21, 2019
src Remove stray println Mar 21, 2019
tests Add Tab.get_script_source and enable / disable debugger methods (#114) Mar 21, 2019
.gitignore Update gitignore Feb 17, 2019
.travis.yml
CHANGELOG.md Add Tab.get_script_source and enable / disable debugger methods (#114) Mar 21, 2019
Cargo.toml Remove examples/real_world and dependencies Mar 21, 2019
README.md Add fetcher as a default feature (#113) Mar 20, 2019

README.md

Headless Chrome

Build Status Crate API Discord channel

Puppeteer for Rust. It looks a little something like this:

use headless_chrome::{browser::default_executable, Browser,
                      LaunchOptionsBuilder, protocol::page::ScreenshotFormat};

fn browse_wikipedia() -> Result<(), failure::Error> {
    let options = LaunchOptionsBuilder::default()
                      .path(Some(default_executable().unwrap()))
                      .build().unwrap();
    let browser = Browser::new(options)?;

    let tab = browser.wait_for_initial_tab()?;

    /// Navigate to wikipedia
    tab.navigate_to("https://www.wikipedia.org")?;

    /// Wait for network/javascript/dom to make the search-box available
    /// and click it.
    tab.wait_for_element("input#searchInput")?.click()?;

    /// Type in a query and press `Enter`
    tab.type_str("WebKit")?.press_key("Enter")?;

    /// We should end up on the WebKit-page once navigated
    tab.wait_for_element("#firstHeading")?;
    assert!(tab.get_url().ends_with("WebKit"));

    /// Take a screenshot of the entire browser window
    let _jpeg_data = tab.capture_screenshot(
                        ScreenshotFormat::JPEG(Some(75)),
                        None,
                        true)?;

    /// Take a screenshot of just the WebKit-Infobox
    let _png_data = tab
        .wait_for_element("#mw-content-text > div > table.infobox.vevent")?
        .capture_screenshot(ScreenshotFormat::PNG)?;
    Ok(())
}

assert!(browse_wikipedia().is_ok());

For fuller examples, take a look at tests/simple.rs and examples/real_world.rs.

If you're looking to do general browser testing or scraping (rather than anything specific to Chrome / DevTools), you're probably better off with fantoccini for now. It's a lot more feature-complete and stable.

Troubleshooting

If you get errors related to timeouts, you likely need to enable sandboxing either in the kernel or as a setuid sandbox. Puppeteer has some information about how to do that here

By default, headless_chrome will download a compatible version of chrome to XDG_DATA_HOME (or equivalent on Windows/Mac). This behaviour can be optionally turned off, and you can use the system version of chrome (assuming you have chrome installed) by disabling the default feature in your Cargo.toml:

[dependencies.headless_chrome]
default-features = false

Missing features

Contributing

Pull requests and issues are most welcome, even if they're just experience reports. If you find anything frustrating or confusing, let me know!

You can’t perform that action at this time.