Spaces:
Runtime error
Runtime error
Add new agents and tools for Devid and BrowsingAgent; remove obsolete ResearchAndReportAgent
670dd87
| import time | |
| from pydantic import Field | |
| from selenium.webdriver.common.by import By | |
| from agency_swarm.tools import BaseTool | |
| from .util import get_web_driver, set_web_driver | |
| from .util.highlights import remove_highlight_and_labels | |
| class ClickElement(BaseTool): | |
| """ | |
| This tool clicks on an element on the current web page based on its number. | |
| Before using this tool make sure to highlight clickable elements on the page by outputting '[highlight clickable elements]' message. | |
| """ | |
| element_number: int = Field( | |
| ..., | |
| description="The number of the element to click on. The element numbers are displayed on the page after highlighting elements.", | |
| ) | |
| def run(self): | |
| wd = get_web_driver() | |
| if "button" not in self._shared_state.get("elements_highlighted", ""): | |
| raise ValueError( | |
| "Please highlight clickable elements on the page first by outputting '[highlight clickable elements]' message. You must output just the message without calling the tool first, so the user can respond with the screenshot." | |
| ) | |
| all_elements = wd.find_elements(By.CSS_SELECTOR, ".highlighted-element") | |
| # iterate through all elements with a number in the text | |
| try: | |
| element_text = all_elements[self.element_number - 1].text | |
| element_text = element_text.strip() if element_text else "" | |
| # Subtract 1 because sequence numbers start at 1, but list indices start at 0 | |
| try: | |
| all_elements[self.element_number - 1].click() | |
| except Exception as e: | |
| if "element click intercepted" in str(e).lower(): | |
| wd.execute_script( | |
| "arguments[0].click();", all_elements[self.element_number - 1] | |
| ) | |
| else: | |
| raise e | |
| time.sleep(3) | |
| result = f"Clicked on element {self.element_number}. Text on clicked element: '{element_text}'. Current URL is {wd.current_url} To further analyze the page, output '[send screenshot]' command." | |
| except IndexError: | |
| result = "Element number is invalid. Please try again with a valid element number." | |
| except Exception as e: | |
| result = str(e) | |
| wd = remove_highlight_and_labels(wd) | |
| wd.execute_script("document.body.style.zoom='1.5'") | |
| set_web_driver(wd) | |
| self._shared_state.set("elements_highlighted", "") | |
| return result | |