Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import subprocess | |
| import os | |
| import time | |
| def save_webpage(url, save_method, javascript): | |
| # Command to execute | |
| command = ["python", "webpage2html.py"] | |
| if javascript: | |
| command.append("-s") | |
| command.append(url) | |
| output_file = "output.html" | |
| if save_method == "From URL": | |
| command_str = " ".join(command) + f" > {output_file}" | |
| else: | |
| command.append(f"/path/to/{url}") | |
| output_file = "something_single.html" | |
| command_str = " ".join(command) + f" > {output_file}" | |
| # Execute the command | |
| result = subprocess.run(command_str, shell=True, capture_output=True, text=True) | |
| # Check for warnings and errors | |
| warning_message = "" | |
| if "[ WARN ]" in result.stderr: | |
| warning_message = result.stderr.split("[ WARN ]")[1].strip() | |
| error_message = result.stderr.strip() if result.returncode != 0 else "" | |
| # Wait for the file to be created, with a timeout of 3 seconds | |
| start_time = time.time() | |
| while not os.path.exists(output_file): | |
| if time.time() - start_time > 3: | |
| return "", f"Error: HTML file not created within the timeout period. {error_message}", "" | |
| time.sleep(0.1) | |
| # Read the output HTML file | |
| with open(output_file, "r", encoding="utf-8") as file: | |
| html_content = file.read() | |
| return html_content, warning_message if warning_message else error_message, output_file | |
| # Gradio Interface | |
| iface = gr.Interface( | |
| fn=save_webpage, | |
| inputs=[ | |
| gr.Textbox(label="URL"), | |
| gr.Radio(choices=["From URL", "From Saved File"], label="Save Method"), | |
| gr.Checkbox(label="Enable JavaScript"), | |
| ], | |
| outputs=[ | |
| gr.HTML(label="HTML Content"), | |
| gr.Textbox(label="Warning/Error Messages"), | |
| gr.File(label="Download HTML File") | |
| ], | |
| title="Webpage to HTML Converter", | |
| description="Convert a webpage to a single HTML file for offline use. This space was created for my friend for API use with a external app but you can perfectly use it here, this is a Gradio wrapper of zTrix's webpage2html script which you can get here: https://github.com/zTrix/webpage2html." | |
| ) | |
| if __name__ == "__main__": | |
| iface.launch() |