Skip to content
This repository was archived by the owner on Nov 10, 2025. It is now read-only.

Commit f671be8

Browse files
committed
feat: allow to provide the driver and options to be used by Selenium
1 parent daab6ab commit f671be8

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

crewai_tools/tools/selenium_scraping_tool/selenium_scraping_tool.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,16 @@ def __init__(
9191
"`selenium` and `webdriver-manager` package not found, please run `uv add selenium webdriver-manager`"
9292
)
9393

94-
options: Options = Options()
95-
options.add_argument("--headless")
96-
self.driver = webdriver.Chrome(options=options)
94+
if 'driver' not in kwargs:
95+
if 'options' not in kwargs:
96+
options: Options = Options()
97+
options.add_argument("--headless")
98+
else:
99+
options = kwargs['options']
100+
self.driver = webdriver.Chrome(options=options)
101+
else:
102+
self.driver = kwargs['driver']
103+
97104
self._by = By
98105
if cookie is not None:
99106
self.cookie = cookie

tests/tools/selenium_scraping_tool_test.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@
22
import tempfile
33
from unittest.mock import MagicMock, patch
44

5-
import pytest
65
from bs4 import BeautifulSoup
7-
6+
from selenium.webdriver.chrome.options import Options
87
from crewai_tools.tools.selenium_scraping_tool.selenium_scraping_tool import (
98
SeleniumScrapingTool,
109
)
@@ -24,9 +23,7 @@ def mock_driver_with_html(html_content):
2423

2524

2625
def initialize_tool_with(mock_driver):
27-
tool = SeleniumScrapingTool()
28-
tool.driver = mock_driver
29-
26+
tool = SeleniumScrapingTool(driver=mock_driver)
3027
return tool
3128

3229

@@ -48,6 +45,17 @@ def test_tool_initialization(mocked_chrome):
4845
except:
4946
pass
5047

48+
@patch("selenium.webdriver.Chrome")
49+
def test_tool_initialization_with_options(mocked_chrome):
50+
mocked_chrome.return_value = MagicMock()
51+
52+
options = Options()
53+
options.add_argument("--disable-gpu")
54+
55+
SeleniumScrapingTool(options=options)
56+
57+
mocked_chrome.assert_called_once_with(options=options)
58+
5159

5260
@patch("selenium.webdriver.Chrome")
5361
def test_scrape_without_css_selector(_mocked_chrome_driver):
@@ -113,3 +121,9 @@ def test_scrape_with_driver_error(_mocked_chrome_driver):
113121
result = tool._run(website_url="https://example.com")
114122
assert result == "Error scraping website: WebDriver error occurred"
115123
mock_driver.close.assert_called_once()
124+
125+
@patch("selenium.webdriver.Chrome")
126+
def test_initialization_with_driver(_mocked_chrome_driver):
127+
mock_driver = MagicMock()
128+
tool = initialize_tool_with(mock_driver)
129+
assert tool.driver == mock_driver

0 commit comments

Comments
 (0)