Commit 3b722898 authored by nextime's avatar nextime

Add qbrowser test

parent ee7ebecd
This diff is collapsed.
......@@ -7,6 +7,9 @@ stream_url = https://192.168.42.1/HLS/record/Live.m3u8
rtmp_url = rtmp://192.168.42.1/record/Live
port = 5000
[Browser]
auto_launch = true
[Tkinter]
window_title = SHM Cam Studio
button_width = 20
......
......@@ -6,49 +6,111 @@ import os
from datetime import datetime
from pathlib import Path
import logging
from typing import List, Optional
import uuid
from playwright_helper import BASE_PROFILE_DIR, BASE_STATE_DIR, PersistentBrowser
logging.getLogger(__name__)
async def new_context(url, persistent_browser: PersistentBrowser, context_id: str, extension_paths: List[Path], **kwargs):
logging.info(kwargs)
# Create a new context with the pre-set extensions
context = await persistent_browser.new_context(
context_id=context_id,
extension_paths=extension_paths,
**kwargs
)
# Open a new page in the context
page = await context.new_page()
# Navigate to a sample website
await page.goto(url)
# Print the page title as an example action
logging.info(f"Page title for context {context_id}: {await page.title()}")
return context
async def monitor_stream(log_path, domain):
async with async_playwright() as p:
browser_is_pw = False
try:
browser = await p.chromium.connect_over_cdp("http://localhost:9222")
except:
user_data_dir = './user-data'
cont = await p.chromium.launch_persistent_context(user_data_dir,
#viewport=None,
headless=False,
args=[
"--disable-infobars",
#"--disable-features=Antaniu"
#try:
# browser = await p.chromium.connect_over_cdp("http://localhost:9222")
#except:
# user_data_dir = './user-data'
# cont = await p.chromium.launch_persistent_context(user_data_dir,
# #viewport=None,
# headless=False,
# args=[
# "--disable-infobars",
# #"--disable-features=Antaniu"
# ],
# ignore_default_args=["--enable-automation", "--no-sandbox"],)
# pages = cont.pages
# browser_is_pw = True
## if pages:
# page = pages[0]
# else:
# page = await cont.new_page()
# logger.info(page.url)
# await page.goto('http://localhost:5000/chat')
# logger.info("Browser session retained")
# #await browser.close()
# browser = cont.browser
# Ensure base directories exist
BASE_PROFILE_DIR.mkdir(parents=True, exist_ok=True)
BASE_STATE_DIR.mkdir(parents=True, exist_ok=True)
use_persistent_context = False
# Define pre-set extensions to be copied to all contexts
EXTENSION_PATHS = [
Path("./my_extension1"), # Example: use forward slashes for cross-platform compatibility
Path("./my_extension2") # Replace with actual paths to unpacked extension directories
]
# Create simulated browser with the chosen mode and extensions
browser = PersistentBrowser(p, BASE_PROFILE_DIR, use_persistent_context, EXTENSION_PATHS,
args=[
"--disable-infobars",
"--disable-features=Antaniu"
],
ignore_default_args=["--enable-automation", "--no-sandbox"],)
pages = cont.pages
browser_is_pw = True
if pages:
page = pages[0]
else:
page = await cont.new_page()
logger.info(page.url)
await page.goto('http://localhost:5000/chat')
logger.info("Browser session retained")
#await browser.close()
browser = cont.browser
ignore_default_args=["--enable-automation", "--no-sandbox"])
await browser.launch()
# Create tasks for multiple contexts
tasks = []
context_id = str(uuid.uuid4()) # Unique ID for each context
##tasks.append(new_context("http://localhost:5000/chat", browser, context_id, EXTENSION_PATHS))
##await asyncio.gather(*tasks)
await new_context("http://localhost:5000/chat", browser, context_id, EXTENSION_PATHS,viewport=None)
bw = 0
dw = 0
bh = 0
bw = 0
while True:
browser = cont.browser
if browser:
contexts = browser.contexts
else:
contexts = [cont]
while len(browser.contexts()) > 0:
#browser = cont.browser
#if browser:
# contexts = browser.contexts
#else:
# contexts = [cont]
contexts = browser.contexts()
logging.info("MUMBER OF CONTEXTS: %d", len(browser.contexts()))
for context in contexts:
logger.debug("@@@@@@@@@@@ NEW CONTEXT @@@@@@@@")
if browser_is_pw:
sizedone=False
logging.info("NUMBER OF PAGES IN THIS CONTEXT: %d", len(context.pages))
for page in context.pages:
logger.info("newpagess----------------")
if browser_is_pw and not sizedone:
......@@ -76,10 +138,17 @@ async def monitor_stream(log_path, domain):
# XXX THIS IS FUCKONG BLOCKING, TODO: RAKE IT OUT AND PUT THE
# WHOLE THING IN A STATE MACHINE
await monitor_requests(page, log_path)
if len(context.pages) < 1 and len(browser.contexts()) == 1:
#await context.close()
logging.info("CLOOOOOOSSSINNNNNNGGGG")
await browser.close()
# XXX TODO: I ALREADY SAID MAKE A FUCKING STATE MACHINE?
logger.info("PORCDIOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO\b\b")
await asyncio.sleep(3) # Check every 0.1 seconds
#logger.info("PORCDIOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO\b\b")
await asyncio.sleep(.1) # Check every 0.1 seconds
# Close the simulated browser, saving states and backing up profiles
#await browser.close()
async def monitor_requests(page, log_path):
async def log_request(request):
......@@ -122,12 +191,13 @@ async def monitor_requests(page, log_path):
def run_browser():
lpath=str(Path(Path.home(), Path('streamon.log')))
#parser = argparse.ArgumentParser(description="Monitor Streamate requests")
#parser.add_argument("--log_path", type=str, default=lpath,
# help="Path to the log file")
#parser.add_argument("--domain", type=str, default="performerclient.streamatemodels.com",
# help="URL to monitor")
#args = parser.parse_args()
# Check if browser should be launched automatically
auto_launch = config.getboolean('Browser', 'auto_launch', fallback=False)
if not auto_launch:
logging.info("Browser auto-launch is disabled. Set auto_launch=true in [Browser] section of shmcamstudio.conf to enable.")
return
logging.info("Starting browser...")
log_dir = os.path.dirname(lpath)
if log_dir and not os.path.exists(log_dir):
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment