|
from smolagents import Tool |
|
from selenium import webdriver |
|
from selenium.webdriver.chrome.options import Options |
|
from selenium.webdriver.chrome.service import Service as ChromeService |
|
from webdriver_manager.chrome import ChromeDriverManager |
|
from markdownify import markdownify as md |
|
from selenium.webdriver.support.ui import WebDriverWait |
|
from selenium.webdriver.support import expected_conditions as EC |
|
from selenium.webdriver.common.by import By |
|
|
|
class GetSVG(Tool): |
|
name = "get_svg" |
|
description = "Lookup and search for an icon and generate the SVG code" |
|
|
|
inputs = { |
|
"request": { |
|
"type": "string", |
|
"description": "The description of the svg from GetSVGList Tool" |
|
} |
|
} |
|
|
|
output_type = "string" |
|
|
|
def forward(self, request: str) -> str: |
|
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( |
|
"user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) " |
|
"AppleWebKit/537.36 (KHTML, like Gecko) " |
|
"Chrome/114.0.0.0 Safari/537.36" |
|
) |
|
|
|
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()), options=chrome_options) |
|
|
|
try: |
|
url = f"https://phosphoricons.com/?q={request}" |
|
driver.get(url) |
|
wait = WebDriverWait(driver, 10) |
|
buttons = wait.until( |
|
EC.presence_of_all_elements_located((By.CSS_SELECTOR, "button.grid-item")) |
|
) |
|
if not buttons: |
|
return "Aucun résultat trouvé." |
|
|
|
first_icon = buttons[0] |
|
svg_element = first_icon.find_element(By.TAG_NAME, "svg") |
|
svg_code = svg_element.get_attribute("outerHTML") |
|
|
|
return svg_code |
|
finally: |
|
driver.quit() |
|
|