pub struct PageHandle { /* private fields */ }Expand description
A handle to an open browser tab.
On drop the underlying page is closed automatically.
§Example
use stygian_browser::{BrowserPool, BrowserConfig};
use stygian_browser::page::WaitUntil;
use std::time::Duration;
let pool = BrowserPool::new(BrowserConfig::default()).await?;
let handle = pool.acquire().await?;
let mut page = handle.browser().expect("valid browser").new_page().await?;
page.navigate("https://example.com", WaitUntil::DomContentLoaded, Duration::from_secs(30)).await?;
let html = page.content().await?;
drop(page); // closes the tab
handle.release().await;Implementations§
Source§impl PageHandle
impl PageHandle
Navigate to url and wait for condition within nav_timeout.
§Errors
Returns BrowserError::NavigationFailed if the navigation times out or
the CDP call fails.
Sourcepub async fn wait_for_selector(
&self,
selector: &str,
wait_timeout: Duration,
) -> Result<()>
pub async fn wait_for_selector( &self, selector: &str, wait_timeout: Duration, ) -> Result<()>
Wait until document.querySelector(selector) is non-null (timeout).
§Errors
Returns BrowserError::NavigationFailed if the selector is not found
within the given timeout.
Sourcepub async fn set_resource_filter(
&mut self,
filter: ResourceFilter,
) -> Result<()>
pub async fn set_resource_filter( &mut self, filter: ResourceFilter, ) -> Result<()>
Set a resource filter to block specific network request types.
Note: Requires Network.enable; called automatically.
§Errors
Returns a BrowserError::CdpError if the CDP call fails.
Sourcepub async fn url(&self) -> Result<String>
pub async fn url(&self) -> Result<String>
Return the current page URL (post-navigation, post-redirect).
Delegates to the CDP Target.getTargetInfo binding already used
internally by save_cookies; no extra network
request is made. Returns an empty string if the URL is not yet set
(e.g. on a blank tab before the first navigation).
§Errors
Returns BrowserError::CdpError if the underlying CDP call fails, or
BrowserError::Timeout if it exceeds cdp_timeout.
§Example
use stygian_browser::{BrowserPool, BrowserConfig};
use stygian_browser::page::WaitUntil;
use std::time::Duration;
let pool = BrowserPool::new(BrowserConfig::default()).await?;
let handle = pool.acquire().await?;
let mut page = handle.browser().expect("valid browser").new_page().await?;
page.navigate("https://example.com", WaitUntil::DomContentLoaded, Duration::from_secs(30)).await?;
let url = page.url().await?;
println!("Final URL after redirects: {url}");Sourcepub fn status_code(&self) -> Result<Option<u16>>
pub fn status_code(&self) -> Result<Option<u16>>
Return the HTTP status code of the most recent main-frame navigation.
The status is captured from the Network.responseReceived CDP event
wired up inside navigate, so it reflects the
final response after any server-side redirects.
Returns None if the status was not captured — for example on file://
navigations, when navigate has not yet been called,
or if the network event subscription failed.
§Errors
This method is infallible; the Result wrapper is kept for API
consistency with other PageHandle methods.
§Example
use stygian_browser::{BrowserPool, BrowserConfig};
use stygian_browser::page::WaitUntil;
use std::time::Duration;
let pool = BrowserPool::new(BrowserConfig::default()).await?;
let handle = pool.acquire().await?;
let mut page = handle.browser().expect("valid browser").new_page().await?;
page.navigate("https://example.com", WaitUntil::DomContentLoaded, Duration::from_secs(30)).await?;
if let Some(code) = page.status_code()? {
println!("HTTP {code}");
}Sourcepub async fn title(&self) -> Result<String>
pub async fn title(&self) -> Result<String>
Return the page’s <title> text.
§Errors
Returns BrowserError::ScriptExecutionFailed if the evaluation fails.
Sourcepub async fn content(&self) -> Result<String>
pub async fn content(&self) -> Result<String>
Return the page’s full outer HTML.
§Errors
Returns BrowserError::ScriptExecutionFailed if the evaluation fails.
Sourcepub async fn eval<T: DeserializeOwned>(&self, script: &str) -> Result<T>
pub async fn eval<T: DeserializeOwned>(&self, script: &str) -> Result<T>
Evaluate arbitrary JavaScript and return the result as T.
§Errors
Returns BrowserError::ScriptExecutionFailed on eval failure or
deserialization error.
Save all cookies for the current page’s origin.
§Errors
Returns BrowserError::CdpError if the CDP call fails.
Sourcepub async fn screenshot(&self) -> Result<Vec<u8>>
pub async fn screenshot(&self) -> Result<Vec<u8>>
Capture a screenshot of the current page as PNG bytes.
The screenshot is full-page by default (viewport clipped to the rendered
layout area). Save the returned bytes to a .png file or process
them in-memory.
§Errors
Returns BrowserError::CdpError if the CDP Page.captureScreenshot
command fails, or BrowserError::Timeout if it exceeds
cdp_timeout.
§Example
use stygian_browser::{BrowserPool, BrowserConfig, WaitUntil};
use std::{time::Duration, fs};
let pool = BrowserPool::new(BrowserConfig::default()).await?;
let handle = pool.acquire().await?;
let mut page = handle.browser().expect("valid browser").new_page().await?;
page.navigate("https://example.com", WaitUntil::Selector("body".to_string()), Duration::from_secs(30)).await?;
let png = page.screenshot().await?;
fs::write("screenshot.png", &png).unwrap();Trait Implementations§
Auto Trait Implementations§
impl Freeze for PageHandle
impl !RefUnwindSafe for PageHandle
impl Send for PageHandle
impl Sync for PageHandle
impl Unpin for PageHandle
impl UnsafeUnpin for PageHandle
impl !UnwindSafe for PageHandle
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more