pub struct BrowserBuilder { /* private fields */ }Expand description
Builder for launching a browser.
Implementations§
Source§impl BrowserBuilder
impl BrowserBuilder
Sourcepub fn new() -> Self
pub fn new() -> Self
Create a new browser builder with default settings.
By default, the browser uses an isolated temporary directory for user data. This prevents conflicts when running multiple browser instances and ensures clean sessions for automation.
Sourcepub fn executable_path(self, path: impl Into<PathBuf>) -> Self
pub fn executable_path(self, path: impl Into<PathBuf>) -> Self
Set the path to the Chromium executable.
If not set, the launcher will search common paths and
check the CHROMIUM_PATH environment variable.
Sourcepub fn headless(self, headless: bool) -> Self
pub fn headless(self, headless: bool) -> Self
Set whether to run in headless mode.
Default is true.
Examples found in repository?
19async fn main() -> Result<(), Box<dyn std::error::Error>> {
20 println!("Launching browser...");
21
22 // Launch a headless browser
23 let browser = Browser::launch()
24 .headless(true)
25 .timeout(Duration::from_secs(30))
26 .launch()
27 .await?;
28
29 println!("Browser launched successfully!");
30
31 // Create a new browser context (isolated environment)
32 let context = browser.new_context().await?;
33 println!("Created browser context: {}", context.id());
34
35 // Create a new page
36 let page = context.new_page().await?;
37 println!("Created page with target: {}", page.target_id());
38
39 // Navigate to a URL with default wait (Load event)
40 println!("\nNavigating to example.com...");
41 let response = page.goto("https://example.com").goto().await?;
42 println!("Navigation complete! URL: {}", response.url());
43
44 // Navigate with DomContentLoaded wait (faster)
45 println!("\nNavigating to httpbin.org with DomContentLoaded wait...");
46 let response = page
47 .goto("https://httpbin.org/html")
48 .wait_until(DocumentLoadState::DomContentLoaded)
49 .timeout(Duration::from_secs(15))
50 .goto()
51 .await?;
52 println!("Navigation complete! URL: {}", response.url());
53
54 // Navigate with custom referer
55 println!("\nNavigating with custom referer...");
56 let response = page
57 .goto("https://httpbin.org/headers")
58 .referer("https://google.com")
59 .wait_until(DocumentLoadState::Load)
60 .goto()
61 .await?;
62 println!("Navigation complete! URL: {}", response.url());
63
64 // Close the browser
65 println!("\nClosing browser...");
66 browser.close().await?;
67 println!("Done!");
68
69 Ok(())
70}Sourcepub fn timeout(self, timeout: Duration) -> Self
pub fn timeout(self, timeout: Duration) -> Self
Set the launch timeout.
Default is 30 seconds.
Examples found in repository?
19async fn main() -> Result<(), Box<dyn std::error::Error>> {
20 println!("Launching browser...");
21
22 // Launch a headless browser
23 let browser = Browser::launch()
24 .headless(true)
25 .timeout(Duration::from_secs(30))
26 .launch()
27 .await?;
28
29 println!("Browser launched successfully!");
30
31 // Create a new browser context (isolated environment)
32 let context = browser.new_context().await?;
33 println!("Created browser context: {}", context.id());
34
35 // Create a new page
36 let page = context.new_page().await?;
37 println!("Created page with target: {}", page.target_id());
38
39 // Navigate to a URL with default wait (Load event)
40 println!("\nNavigating to example.com...");
41 let response = page.goto("https://example.com").goto().await?;
42 println!("Navigation complete! URL: {}", response.url());
43
44 // Navigate with DomContentLoaded wait (faster)
45 println!("\nNavigating to httpbin.org with DomContentLoaded wait...");
46 let response = page
47 .goto("https://httpbin.org/html")
48 .wait_until(DocumentLoadState::DomContentLoaded)
49 .timeout(Duration::from_secs(15))
50 .goto()
51 .await?;
52 println!("Navigation complete! URL: {}", response.url());
53
54 // Navigate with custom referer
55 println!("\nNavigating with custom referer...");
56 let response = page
57 .goto("https://httpbin.org/headers")
58 .referer("https://google.com")
59 .wait_until(DocumentLoadState::Load)
60 .goto()
61 .await?;
62 println!("Navigation complete! URL: {}", response.url());
63
64 // Close the browser
65 println!("\nClosing browser...");
66 browser.close().await?;
67 println!("Done!");
68
69 Ok(())
70}Sourcepub fn user_data_dir(self, path: impl Into<PathBuf>) -> Self
pub fn user_data_dir(self, path: impl Into<PathBuf>) -> Self
Set a persistent user data directory for browser profile.
When set, browser state (cookies, localStorage, settings) persists in the specified directory across browser restarts. The directory is NOT cleaned up when the browser closes.
Note: Using the same directory for multiple concurrent browser instances will cause profile lock conflicts.
§Example
use viewpoint_core::Browser;
let browser = Browser::launch()
.user_data_dir("/path/to/profile")
.launch()
.await?;Sourcepub fn user_data_dir_system(self) -> Self
pub fn user_data_dir_system(self) -> Self
Use the system default profile directory.
On Linux, this is typically ~/.config/chromium/.
No --user-data-dir flag is passed to Chromium.
Warning: This can cause conflicts if another Chromium instance is running, or if a previous session crashed without proper cleanup. Prefer the default isolated temp profile for automation scenarios.
§Example
use viewpoint_core::Browser;
let browser = Browser::launch()
.user_data_dir_system()
.launch()
.await?;Sourcepub fn user_data_dir_template_from(
self,
template_path: impl Into<PathBuf>,
) -> Self
pub fn user_data_dir_template_from( self, template_path: impl Into<PathBuf>, ) -> Self
Use a template profile copied to a temporary directory.
The contents of the template directory are copied to a new temporary directory. This allows starting with pre-configured settings, extensions, or cookies while maintaining isolation between sessions.
The temporary directory is automatically cleaned up when the browser closes or is dropped. The original template directory is unchanged.
§Example
use viewpoint_core::Browser;
// Create a browser with extensions from a template profile
let browser = Browser::launch()
.user_data_dir_template_from("/path/to/template-profile")
.launch()
.await?;§Loading Extensions
Extensions can also be loaded at runtime without a template profile:
use viewpoint_core::Browser;
let browser = Browser::launch()
.args(["--load-extension=/path/to/unpacked-extension"])
.launch()
.await?;Sourcepub async fn launch(self) -> Result<Browser, BrowserError>
pub async fn launch(self) -> Result<Browser, BrowserError>
Launch the browser.
§Errors
Returns an error if:
- Chromium is not found
- The process fails to spawn
- The browser doesn’t start within the timeout
- Template directory doesn’t exist or can’t be copied
Examples found in repository?
19async fn main() -> Result<(), Box<dyn std::error::Error>> {
20 println!("Launching browser...");
21
22 // Launch a headless browser
23 let browser = Browser::launch()
24 .headless(true)
25 .timeout(Duration::from_secs(30))
26 .launch()
27 .await?;
28
29 println!("Browser launched successfully!");
30
31 // Create a new browser context (isolated environment)
32 let context = browser.new_context().await?;
33 println!("Created browser context: {}", context.id());
34
35 // Create a new page
36 let page = context.new_page().await?;
37 println!("Created page with target: {}", page.target_id());
38
39 // Navigate to a URL with default wait (Load event)
40 println!("\nNavigating to example.com...");
41 let response = page.goto("https://example.com").goto().await?;
42 println!("Navigation complete! URL: {}", response.url());
43
44 // Navigate with DomContentLoaded wait (faster)
45 println!("\nNavigating to httpbin.org with DomContentLoaded wait...");
46 let response = page
47 .goto("https://httpbin.org/html")
48 .wait_until(DocumentLoadState::DomContentLoaded)
49 .timeout(Duration::from_secs(15))
50 .goto()
51 .await?;
52 println!("Navigation complete! URL: {}", response.url());
53
54 // Navigate with custom referer
55 println!("\nNavigating with custom referer...");
56 let response = page
57 .goto("https://httpbin.org/headers")
58 .referer("https://google.com")
59 .wait_until(DocumentLoadState::Load)
60 .goto()
61 .await?;
62 println!("Navigation complete! URL: {}", response.url());
63
64 // Close the browser
65 println!("\nClosing browser...");
66 browser.close().await?;
67 println!("Done!");
68
69 Ok(())
70}Trait Implementations§
Source§impl Clone for BrowserBuilder
impl Clone for BrowserBuilder
Source§fn clone(&self) -> BrowserBuilder
fn clone(&self) -> BrowserBuilder
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more