from typing import Any from smolagents.tools import Tool from selenium.webdriver.common.by import By class SearchItemCtrlFTool(Tool): name = "search_item_ctrl_f" description = "Searches for text on the current page via Ctrl + F and jumps to the nth occurrence." inputs = { 'text': {'type': 'string', 'description': 'The text to search for'}, 'nth_result': {'type': 'integer', 'description': 'Which occurrence to jump to (default: 1)', 'nullable': True} } output_type = "string" def __init__(self, driver: Any = None, *args, **kwargs): super().__init__(*args, **kwargs) self.driver = driver self.is_initialized = False def forward(self, text: str, nth_result: int = 1) -> str: if not self.driver: raise ValueError("WebDriver instance is required.") elements = self.driver.find_elements(By.XPATH, f"//*[contains(text(), '{text}')]") if nth_result > len(elements): raise Exception(f"Match n°{nth_result} not found (only {len(elements)} matches found)") result = f"Found {len(elements)} matches for '{text}'." elem = elements[nth_result - 1] self.driver.execute_script("arguments[0].scrollIntoView(true);", elem) result += f" Focused on element {nth_result} of {len(elements)}" return result