LoginSignup
10
7

More than 5 years have passed since last update.

RustでChromeを操作する

Posted at

TL;DR

rust-headless-chromeを動かしてみた、という話です。

Puppeteerを使えば同等のことはできるし色々と道具も揃ってはいるのですが、せっかくRustからChromeにWebSocketでつなぐインターフェースを作ってくれた方がいらしたので、試しに触ってみました。

テスト用のcrateを作る

Rust使いにはおなじみのやつです。

> cargo init headless_chrome_test --bin

Cargo.tomlを編集

これもまたおなじみのやつです。
dependenciesにheadless_chromeを追加します。
failureも後々使いたいので、ついでに追加しておきます。

Cargo.toml
[package]
name = "headless_chrome_test"
version = "0.1.0"
authors = ["Yuki Mitsui"]
edition = "2018"

[dependencies]
headless_chrome = "0.1.1"
failure = "0.1"

サンプルを動かす

rust-headless-chromeに掲載されているテスト用のコードは「こんな感じで書くんだよ!」と書かれてはいますが、実際に動かすにはもうひと手間かける必要があります。とはいえmain()を足したりするだけなので、これもおなじみのやつです。

Windowsで試してみたので、バイナリのパスを変更しています。

Issuesを見ると、将来的には動作している環境にあわせてデフォルトのパス名をある程度変更してくれるつもりはありそうでした。

headless: trueにするとwait_for_element()で固まってしまったので、headless: falseにしています。

main.rs
use std::result::Result;
use failure::Error;
use headless_chrome::browser::{Browser, LaunchOptions};

fn main() -> Result<(), Error> {
    let browser = Browser::new(LaunchOptions {
        headless: false,
        path: "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe",
        ..Default::default()
    })?;

    let tab = browser.wait_for_initial_tab()?;

    tab.navigate_to("https://www.wikipedia.org/")?;
    tab.wait_for_element("input#searchInput")?.click()?;

    tab.type_str("WebKit")?;
    tab.press_key("Enter")?;
    tab.wait_for_element("#firstHeading")?;

    assert_eq!(true, tab.get_url().ends_with("WebKit"));
    Ok(())
}

動かす

cargo runしましょう。headless: falseを指定しているので、WikipediaにアクセスしてWebKitを検索している様子が見て取れます。

10
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
7