# from playwright.sync_api import sync_playwright

# def run(playwright):
#     browser = playwright.chromium.launch()
#     page = browser.new_page()
#     page.goto("https://www.yugasa.com")
#     print(page.title())
#     browser.close()

# with sync_playwright() as playwright:
#     run(playwright)



# import Playwright, sync_playwright, expect, TimeoutError
# import os
# import json
# from datetime import datetime

# def run(playwright: Playwright, headless: bool = True):
#     browser = playwright.chromium.launch(headless=headless)
#     context = browser.new_context()
#     page = context.new_page()

#     # Create screenshot directory
#     screenshots_dir = os.path.join(os.getcwd(), 'screenshots')
#     os.makedirs(screenshots_dir, exist_ok=True)

#     search_results = []
#     error_messages = []

#     try:
#         # Step 1: Navigate to Google
#         print("Navigating to Google...")
#         page.goto('https://google.com', wait_until='networkidle')

#         # Take initial screenshot
#         timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
#         initial_screenshot = os.path.join(screenshots_dir, f"google_initial_{timestamp}.png")
#         page.screenshot(path=initial_screenshot)
#         print(f"Initial screenshot saved to {initial_screenshot}")

#         # Step 2: Handle cookie consent dialog if present
#         try:
#             # Check for cookie dialog with different possible buttons
#             for selector in ['button:has-text("Accept all")', 'button:has-text("I agree")', 'button:has-text("Agree")', '[aria-label="Accept all"]']:
#                 if page.is_visible(selector, timeout=3000):
#                     print(f"Cookie consent dialog found, clicking {selector}...")
#                     page.click(selector)
#                     break
#         except TimeoutError:
#             print("No cookie consent dialog found or interaction timed out, continuing...")

#         # Step 3: Type search query
#         print("Typing search query...")
#         try:
#             # Find search input, this can be the main search box or the one shown after clicking on a different area
#             search_input_selector = 'input[name="q"]'
#             page.wait_for_selector(search_input_selector, timeout=5000)
#             page.fill(search_input_selector, 'Python Playwright')

#             # Step 4: Press Enter to search
#             page.press(search_input_selector, 'Enter')
#         except TimeoutError as e:
#             error_message = f"Error: Could not find search input: {str(e)}"
#             print(error_message)
#             error_messages.append(error_message)
#             # Take error screenshot
#             page.screenshot(path=os.path.join(screenshots_dir, f"error_search_input_{timestamp}.png"))

#         # Step 5: Wait for search results to load
#         print("Waiting for search results...")
#         try:
#             # Wait for search results to appear
#             page.wait_for_selector('#search', timeout=10000)
#         except TimeoutError as e:
#             error_message = f"Error: Search results did not load: {str(e)}"
#             print(error_message)
#             error_messages.append(error_message)
#             # Take error screenshot
#             page.screenshot(path=os.path.join(screenshots_dir, f"error_results_load_{timestamp}.png"))

#         # Step 6: Take screenshot of search results
#         print("Taking screenshot of search results...")
#         results_screenshot = os.path.join(screenshots_dir, f"search_results_{timestamp}.png")
#         page.screenshot(path=results_screenshot)
#         print(f"Search results screenshot saved to {results_screenshot}")

#         # Step 7: Extract top 5 search results
#         print("Extracting search results...")
#         try:
#             # Different selectors to try for search results
#             selectors = [
#                 '#search .g', # Common selector
#                 '.srg .g',    # Alternative selector
#                 '.yuRUbf',    # Another alternative
#                 '[data-hveid] .yuRUbf', # More specific
#                 '[data-sokoban-container] .g' # Another variation
#             ]

#             result_elements = None
#             for selector in selectors:
#                 result_elements = page.query_selector_all(selector)
#                 if result_elements and len(result_elements) > 0:
#                     print(f"Found results with selector: {selector}")
#                     break

#             if not result_elements or len(result_elements) == 0:
#                 error_message = "Could not find search results with any of the tried selectors"
#                 print(error_message)
#                 error_messages.append(error_message)
#                 return {"success": False, "errors": error_messages}

#             # Extract data from up to 5 results
#             count = 0
#             for result in result_elements[:5]:
#                 try:
#                     # Try different selectors for the title and link
#                     title_element = result.query_selector('h3') or result.query_selector('.LC20lb')
#                     link_element = result.query_selector('a')

#                     if title_element and link_element:
#                         title = title_element.text_content().strip()
#                         url = link_element.get_attribute('href')

#                         if title and url:
#                             search_results.append({
#                                 "position": count + 1,
#                                 "title": title,
#                                 "url": url
#                             })
#                             count += 1
#                 except Exception as e:
#                     print(f"Error extracting data from result {count+1}: {str(e)}")
#                     continue

#             print(f"Extracted {len(search_results)} search results")

#         except Exception as e:
#             error_message = f"Error extracting search results: {str(e)}"
#             print(error_message)
#             error_messages.append(error_message)

#     except Exception as e:
#         error_message = f"Unexpected error: {str(e)}"
#         print(error_message)
#         error_messages.append(error_message)
#     finally:
#         # Clean up
#         browser.close()

#     # Return structured results
#     return {
#         "success": len(error_messages) == 0,
#         "screenshots": {
#             "initial": initial_screenshot,
#             "results": results_screenshot if 'results_screenshot' in locals() else None
#         },
#         "search_results": search_results,
#         "errors": error_messages
#     }

# def main(headless: bool = True):
#     with sync_playwright() as playwright:
#         results = run(playwright, headless=headless)
#         print(json.dumps(results, indent=2))
#         return results

# if __name__ == "__main__":
#     # Set to False to see the browser in action
#     main(headless=True)



# Generated Python Playwright script for: Create a Google search automation script with these specific steps: 1) Navigate to google.com, 2) Handle any cookie consent dialogs by clicking 'Accept all' or 'I agree' if present, 3) Type 'Python Playwright' in the search box, 4) Press Enter to search, 5) Wait for search results to load, 6) Take a screenshot of the search results page, 7) Extract titles and URLs of the top 5 search results, 8) Return this data as a structured output. Include comprehensive error handling for scenarios like element not found, timeouts, and navigation errors. The script should be configurable for headless mode.
# Websites: https://google.com

from playwright.sync_api import Playwright, sync_playwright, expect
import os
import time
from datetime import datetime

def run(playwright: Playwright, headless: bool = True):
    # Launch browser with configurable headless mode
    browser = playwright.chromium.launch(headless=headless)
    context = browser.new_context()
    page = context.new_page()

    # Create screenshot directory if needed
    screenshots_dir = os.path.join(os.getcwd(), 'screenshots')
    os.makedirs(screenshots_dir, exist_ok=True)

    results = []

    try:
        # Process each website
        for url in ['https://google.com']:
            print(f"Processing URL: {url}")

            # Navigate to the website
            page.goto(url)

            # Take a screenshot
            timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
            screenshot_path = os.path.join(screenshots_dir, f"{url.replace('://', '_').replace('/', '_')}_{timestamp}.png")
            page.screenshot(path=screenshot_path)
            results.append(f"Screenshot saved to {screenshot_path}")

            # Wait for page to fully load
            page.wait_for_load_state("networkidle")

            # Get page title
            title = page.title()
            results.append(f"Page title: {title}")

            # Add task-specific implementation here based on requirements
            # For example:
            # - Extract pricing information
            # - Fill in forms
            # - Click buttons
            # - Navigate to specific pages

            # Example: Extract all text from the main content area
            content = page.text_content('main') or page.text_content('body')
            results.append(f"Extracted {len(content.split())} words from {url}")

    except Exception as e:
        results.append(f"Error: {str(e)}")
    finally:
        # Make sure to close the browser
        browser.close()

    return "\n".join(results)

def main(headless: bool = True):
    with sync_playwright() as playwright:
        results = run(playwright, headless=headless)
        print(results)
        return results

if __name__ == "__main__":
    main()
