Spaces:
Paused
Paused
| import gradio as gr | |
| from selenium import webdriver | |
| from selenium.webdriver.common.by import By | |
| from selenium.webdriver.common.keys import Keys | |
| from selenium.webdriver.support.ui import WebDriverWait | |
| from selenium.webdriver.support import expected_conditions as EC | |
| from selenium.webdriver.chrome.options import Options | |
| import time | |
| import subprocess | |
| import os | |
| # Function to log Chrome and ChromeDriver versions | |
| def log_versions(): | |
| try: | |
| # Print PATH for debugging | |
| print(f"System PATH: {os.environ.get('PATH')}") | |
| # Try finding Chrome binary | |
| chrome_binary = None | |
| for binary in ["google-chrome", "google-chrome-stable", "chromium-browser"]: | |
| try: | |
| chrome_path = subprocess.check_output(["which", binary]).decode().strip() | |
| print(f"Found {binary} at: {chrome_path}") | |
| chrome_binary = binary | |
| break | |
| except subprocess.CalledProcessError: | |
| continue | |
| if not chrome_binary: | |
| print("Error: No Chrome binary (google-chrome, google-chrome-stable, chromium-browser) found") | |
| return | |
| # Get Chrome version | |
| chrome_version = subprocess.check_output([chrome_binary, "--version"]).decode().strip() | |
| print(f"Chrome version: {chrome_version}") | |
| # Try finding ChromeDriver | |
| try: | |
| chromedriver_path = subprocess.check_output(["which", "chromedriver"]).decode().strip() | |
| print(f"Found chromedriver at: {chromedriver_path}") | |
| chromedriver_version = subprocess.check_output(["chromedriver", "--version"]).decode().strip() | |
| print(f"ChromeDriver version: {chromedriver_version}") | |
| except subprocess.CalledProcessError as e: | |
| print(f"Error finding chromedriver: {str(e)}") | |
| except Exception as e: | |
| print(f"Error checking versions: {str(e)}") | |
| # Function to generate image URL | |
| def generate_image(prompt): | |
| # Log versions for debugging | |
| log_versions() | |
| # Configure Chrome options for headless mode | |
| chrome_options = Options() | |
| chrome_options.add_argument("--headless") | |
| chrome_options.add_argument("--no-sandbox") | |
| chrome_options.add_argument("--disable-dev-shm-usage") | |
| chrome_options.add_argument("--disable-gpu") | |
| chrome_options.add_argument("window-size=1920x1080") | |
| # Initialize the WebDriver | |
| try: | |
| driver = webdriver.Chrome(options=chrome_options) | |
| except Exception as e: | |
| return f"Error initializing ChromeDriver: {str(e)}" | |
| try: | |
| # Open the website | |
| driver.get("https://gptimage.ai/") | |
| # Wait for the textarea input field | |
| input_field = WebDriverWait(driver, 10).until( | |
| EC.presence_of_element_located( | |
| (By.CSS_SELECTOR, "textarea.wp-content-visualizer-chat-input") | |
| ) | |
| ) | |
| # Enter the prompt | |
| input_field.send_keys(prompt) | |
| # Wait for the "Generate Image" button and click it | |
| generate_button = WebDriverWait(driver, 10).until( | |
| EC.element_to_be_clickable( | |
| (By.CSS_SELECTOR, "button.wp-content-visualizer-chat-send") | |
| ) | |
| ) | |
| generate_button.click() | |
| # Wait for the generated image | |
| generated_image = WebDriverWait(driver, 20).until( | |
| EC.presence_of_element_located( | |
| (By.CSS_SELECTOR, "img.wp-content-visualizer-generated-image") | |
| ) | |
| ) | |
| # Extract the image URL | |
| image_url = generated_image.get_attribute("src") | |
| return image_url | |
| except Exception as e: | |
| return f"Error: {str(e)}" | |
| finally: | |
| # Close the browser | |
| driver.quit() | |
| # Gradio interface | |
| def gradio_interface(prompt): | |
| try: | |
| image_url = generate_image(prompt) | |
| if image_url.startswith("Error"): | |
| return image_url, None | |
| return f"Generated Image URL: {image_url}", image_url | |
| except Exception as e: | |
| return f"Error: {str(e)}", None | |
| # Create Gradio app | |
| iface = gr.Interface( | |
| fn=gradio_interface, | |
| inputs=gr.Textbox(label="Enter your prompt", placeholder="e.g., A serene mountain landscape at sunset"), | |
| outputs=[gr.Textbox(label="Result"), gr.Image(label="Generated Image")], | |
| title="Image Generator with selenium", | |
| description="Enter a prompt to generate an image using gptimage.ai." | |
| ) | |
| # Launch the app | |
| if __name__ == "__main__": | |
| iface.launch(server_name="0.0.0.0", server_port=7860) # No share=True |