linkedin-scraper-gradio / test_browser_win.py
ARenigma's picture
Linkedin security challenge debug
8269071
Raw
History Blame Contribute Delete
5.73 kB
#!/usr/bin/env python3
"""
Test script for verifying browser installation and accessibility in any environment.
Windows-compatible version.
This script attempts to:
1. Launch a browser using Playwright
2. Navigate to a basic website
3. Take a screenshot
4. Close the browser
"""
import os
import sys
import time
import argparse
from pathlib import Path
import logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[logging.StreamHandler()]
)
logger = logging.getLogger(__name__)
def check_system_dependencies():
"""Check for and install missing system dependencies."""
if not sys.platform.startswith('linux'):
logger.info("Not on Linux, skipping dependency check")
return
# This function should never run on Windows, but we keep it for compatibility
logger.info("Dependency check skipped on Windows")
def main():
# Parse command line arguments
parser = argparse.ArgumentParser(description="Browser test script for Windows")
parser.add_argument("--no-headless", action="store_true", help="Run in non-headless mode")
args = parser.parse_args()
try:
logger.info("Starting browser test")
from playwright.sync_api import sync_playwright
logger.info("Imported playwright successfully")
# Skip dependency check on Windows
logger.info("Skipping system dependency check on Windows")
# Check if we're in a Hugging Face Space
is_hf_space = os.environ.get("SPACE_ID") is not None
logger.info(f"Running in HF Space environment: {is_hf_space}")
logger.info(f"Platform: {sys.platform}")
logger.info(f"Headless mode: {not args.no_headless}")
# Create output directory
output_dir = Path("./screenshots")
output_dir.mkdir(exist_ok=True)
logger.info("Launching playwright")
with sync_playwright() as playwright:
browser_options = {
"headless": not args.no_headless,
"args": [
"--no-sandbox",
"--disable-gpu",
"--disable-dev-shm-usage",
]
}
# Only use these args on Linux
if sys.platform.startswith('linux'):
browser_options["args"].extend([
"--disable-setuid-sandbox",
"--single-process",
])
# Only check for system browser on Linux
if sys.platform.startswith('linux'):
# Check for an existing browser config
browser_config_path = Path("browser_config/system_browser.py")
if browser_config_path.exists():
logger.info("Found system browser config file")
sys.path.append(str(Path("browser_config").absolute()))
try:
from system_browser import SYSTEM_BROWSER_PATH
if os.path.exists(SYSTEM_BROWSER_PATH) and os.access(SYSTEM_BROWSER_PATH, os.X_OK):
logger.info(f"Using system browser at {SYSTEM_BROWSER_PATH}")
browser_options["executable_path"] = SYSTEM_BROWSER_PATH
except ImportError:
logger.warning("Could not import system browser config")
# Check for browser in cache
chrome_path = "/home/user/.cache/ms-playwright/chromium-1105/chrome-linux/chrome"
if os.path.exists(chrome_path) and os.access(chrome_path, os.X_OK):
logger.info(f"Found browser in cache at {chrome_path}")
browser_options["executable_path"] = chrome_path
logger.info("Launching browser with options:")
for key, value in browser_options.items():
logger.info(f" {key}: {value}")
browser = playwright.chromium.launch(**browser_options)
context = browser.new_context()
page = context.new_page()
logger.info("Browser launched successfully!")
try:
logger.info("Navigating to example.com")
page.goto("https://example.com")
logger.info("Page loaded, taking screenshot")
screenshot_path = output_dir / "test_screenshot.png"
page.screenshot(path=str(screenshot_path))
logger.info(f"Screenshot saved to {screenshot_path}")
logger.info(f"Page title: {page.title()}")
# Get some page information
dimensions = page.evaluate("""() => {
return {
width: window.innerWidth,
height: window.innerHeight,
devicePixelRatio: window.devicePixelRatio
}
}""")
logger.info(f"Window dimensions: {dimensions}")
except Exception as e:
logger.error(f"Error during page navigation: {e}")
finally:
logger.info("Closing browser")
context.close()
browser.close()
logger.info("Test completed successfully!")
return 0
except Exception as e:
logger.error(f"Test failed with error: {e}")
import traceback
logger.error(traceback.format_exc())
return 1
if __name__ == "__main__":
sys.exit(main())