Update to itb_screenshot and friends
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
#!/usr/bin/env python3
|
||||
import sys
|
||||
import os
|
||||
import time
|
||||
import argparse
|
||||
from selenium import webdriver
|
||||
|
||||
class NavigationController:
|
||||
def __init__(self, debug_port: int):
|
||||
"""Initialize connection to Chrome instance"""
|
||||
options = webdriver.ChromeOptions()
|
||||
options.add_experimental_option("debuggerAddress", f"127.0.0.1:{debug_port}")
|
||||
self.driver = webdriver.Chrome(options=options)
|
||||
|
||||
# Load JavaScript files
|
||||
js_dir = os.path.join(os.path.dirname(__file__), "..", "js")
|
||||
self.js_code = ""
|
||||
with open(os.path.join(js_dir, "viewport.js")) as f:
|
||||
self.js_code = f.read()
|
||||
|
||||
def navigate(self, url: str) -> bool:
|
||||
"""
|
||||
Navigate to the specified URL
|
||||
Returns True if navigation was successful
|
||||
"""
|
||||
try:
|
||||
# Store initial URL for comparison
|
||||
initial_url = self.driver.current_url
|
||||
|
||||
# Execute navigation
|
||||
self.driver.get(url)
|
||||
|
||||
# Wait for navigation to complete
|
||||
max_wait = 10 # seconds
|
||||
start_time = time.time()
|
||||
|
||||
while time.time() - start_time < max_wait:
|
||||
# Check if URL has changed
|
||||
if self.driver.current_url != initial_url:
|
||||
# Wait a bit more for page to stabilize
|
||||
time.sleep(0.5)
|
||||
return True
|
||||
|
||||
time.sleep(0.1)
|
||||
|
||||
# If we get here, navigation may have failed
|
||||
print(f"Warning: Navigation timeout after {max_wait} seconds", file=sys.stderr)
|
||||
return False
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error during navigation: {str(e)}", file=sys.stderr)
|
||||
return False
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description='Navigate to URL in Chrome')
|
||||
parser.add_argument('debug_port', type=int, help='Chrome debug port')
|
||||
parser.add_argument('url', help='URL to navigate to')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
try:
|
||||
controller = NavigationController(args.debug_port)
|
||||
success = controller.navigate(args.url)
|
||||
sys.exit(0 if success else 1)
|
||||
|
||||
except Exception as e:
|
||||
print(f"Fatal error: {str(e)}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user