added fullscreening of video, chrome using default data dir
This commit is contained in:
parent
6564c7b546
commit
7eecbe0687
|
@ -1,23 +1,56 @@
|
||||||
use std::{thread, time::Duration};
|
use std::{env, path::Path};
|
||||||
|
|
||||||
use futures::TryFutureExt;
|
use thirtyfour::{session::handle::SessionHandle, By, DesiredCapabilities, WebDriver};
|
||||||
use thirtyfour::{
|
|
||||||
prelude::ElementQueryable, session::handle::SessionHandle, By, DesiredCapabilities, WebDriver,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub struct BrowserSession {
|
pub struct BrowserSession {
|
||||||
driver: WebDriver,
|
driver: WebDriver,
|
||||||
}
|
}
|
||||||
|
const DATA_DIR_ARG: &str = "--user-data-dir";
|
||||||
|
#[cfg(target_os = "linux")]
|
||||||
|
const DATA_DIR_CHROMIUM: &str = "/.config/chromium";
|
||||||
|
#[cfg(target_os = "linux")]
|
||||||
|
const DATA_DIR_CHROME: &str = "~/.config/google-chrome";
|
||||||
|
#[cfg(target_os = "linux")]
|
||||||
|
const HOME_VARIABLE: &str = "HOME";
|
||||||
|
#[cfg(target_os = "windows")]
|
||||||
|
const DATA_DIR_CHROME: &str = "\\Google\\Chrome\\User Data";
|
||||||
|
#[cfg(target_os = "windows")]
|
||||||
|
const DATA_DIR_CHROMIUM: &str = "\\Google\\Chromium\\User Data";
|
||||||
|
#[cfg(target_os = "windows")]
|
||||||
|
const HOME_VARIABLE: &str = "LOCALAPPDATA";
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct BrowserHandle {
|
pub struct BrowserHandle {
|
||||||
handle: SessionHandle,
|
handle: SessionHandle,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_data_dir() -> String {
|
||||||
|
let mut home = String::new();
|
||||||
|
for (key, val) in env::vars() {
|
||||||
|
if key == HOME_VARIABLE {
|
||||||
|
home = val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if home.is_empty() {
|
||||||
|
panic!("cannot find home env variable");
|
||||||
|
}
|
||||||
|
if Path::new(format!("{}{}", home, DATA_DIR_CHROMIUM).as_str()).exists() {
|
||||||
|
println!("{}{}", home, DATA_DIR_CHROMIUM);
|
||||||
|
return format!("{}{}", home, DATA_DIR_CHROMIUM);
|
||||||
|
}
|
||||||
|
println!("{}{}", home, DATA_DIR_CHROME);
|
||||||
|
return format!("{}{}", home, DATA_DIR_CHROME);
|
||||||
|
}
|
||||||
|
|
||||||
impl BrowserSession {
|
impl BrowserSession {
|
||||||
pub async fn new() -> Result<Self, anyhow::Error> {
|
pub async fn new() -> Result<Self, anyhow::Error> {
|
||||||
let caps = DesiredCapabilities::chrome();
|
// TODO: error if chrome is already running
|
||||||
|
let mut caps = DesiredCapabilities::chrome();
|
||||||
|
// Use the normal data directory (for extensions and logins)
|
||||||
|
caps.add_chrome_arg(format!("{}={}", DATA_DIR_ARG, get_data_dir()).as_str())?;
|
||||||
let driver = WebDriver::new("http://localhost:6444", caps).await?;
|
let driver = WebDriver::new("http://localhost:6444", caps).await?;
|
||||||
|
|
||||||
|
println!("started browser");
|
||||||
Ok(Self { driver: driver })
|
Ok(Self { driver: driver })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,17 +68,31 @@ impl BrowserSession {
|
||||||
|
|
||||||
impl BrowserHandle {
|
impl BrowserHandle {
|
||||||
pub async fn start(&self, start_url: &str) -> Result<(), anyhow::Error> {
|
pub async fn start(&self, start_url: &str) -> Result<(), anyhow::Error> {
|
||||||
// self.handle.fullscreen_window().await?;
|
self.handle.fullscreen_window().await?;
|
||||||
self.go_to(format!("http://{}", start_url).as_str()).await?;
|
println!("!");
|
||||||
|
self.handle
|
||||||
|
.get(format!("http://{}", start_url))
|
||||||
|
.await
|
||||||
|
.unwrap_or(()); // Ignore errors ig? idfk it errors out in some weirdo way but it works
|
||||||
|
println!("?");
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn decline_cookies(&self) -> Result<(), anyhow::Error> {
|
async fn fullscreen_youtube(&self) -> Result<(), anyhow::Error> {
|
||||||
|
let elems = self
|
||||||
|
.handle
|
||||||
|
.find_elements(By::ClassName("ytp-fullscreen-button"))
|
||||||
|
.await?;
|
||||||
|
if elems.len() != 0 {
|
||||||
|
if let Some(button) = elems.first() {
|
||||||
|
button.click().await?;
|
||||||
|
}
|
||||||
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn youtube(&self) -> Result<(), anyhow::Error> {
|
async fn youtube(&self) -> Result<(), anyhow::Error> {
|
||||||
self.decline_cookies().await?;
|
self.fullscreen_youtube().await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue