Skip to content

Commit 02331a9

Browse files
committed
Added proxy support
1 parent 03c848d commit 02331a9

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

selenium_extensions/core.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@ class SeleniumDriver:
221221
executable_path (str): path to the browser's webdriver binary. If set to ``None`` selenium will serach for browser's webdriver in ``$PATH``.
222222
run_headless (bool): boolean flag that indicates if webdriver has to be headless (without GUI).
223223
load_images (bool): boolean flag that indicates if webdriver has to render images.
224+
use_proxy (str): use http proxy in <host:port> format.
224225
225226
Raises:
226227
selenium_extensions.exceptions.SeleniumExtensionsException: ``browser`` is not supported by ``selenium_extensions``.
@@ -254,12 +255,13 @@ def goto_google(self):
254255
Firefox doesn't support native headless mode. We use ``pyvirtualdisplay`` to simulate it. In order ``pyvirtualdisplay`` to work you need to install ``Xvfb`` package: ``sudo apt install xvfb``.
255256
'''
256257

257-
def __init__(self, browser=None, executable_path=None, run_headless=False, load_images=True):
258+
def __init__(self, browser=None, executable_path=None, run_headless=False, load_images=True, use_proxy=None):
258259
self._initialize_driver(browser, executable_path,
259-
run_headless, load_images)
260+
run_headless, load_images,
261+
use_proxy)
260262
self._initialize_methods()
261263

262-
def _initialize_driver(self, browser, executable_path, run_headless, load_images):
264+
def _initialize_driver(self, browser, executable_path, run_headless, load_images, use_proxy):
263265
if browser is None:
264266
self.driver = chrome_driver()
265267
browser = browser.lower()
@@ -272,11 +274,13 @@ def _initialize_driver(self, browser, executable_path, run_headless, load_images
272274
if browser == 'chrome':
273275
self.driver = chrome_driver(executable_path=executable_path,
274276
run_headless=run_headless,
275-
load_images=load_images)
277+
load_images=load_images,
278+
use_proxy=use_proxy)
276279
if browser == 'firefox':
277280
self.driver = firefox_driver(executable_path=executable_path,
278281
run_headless=run_headless,
279-
load_images=load_images)
282+
load_images=load_images,
283+
use_proxy=use_proxy)
280284

281285
def _initialize_methods(self):
282286
self.shut_down = partial(shut_down, self.driver)

selenium_extensions/drivers.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@
55

66

77
def chrome_driver(executable_path=None, run_headless=False,
8-
load_images=True):
8+
load_images=True, use_proxy=None):
99
'''Function to initialize ``selenium.webdriver.Chrome`` with extended options
1010
1111
Args:
1212
executable_path (str): path to the chromedriver binary. If set to ``None`` selenium will serach for ``chromedriver`` in ``$PATH``.
1313
run_headless (bool): boolean flag that indicates if chromedriver has to be headless (without GUI).
1414
load_images (bool): boolean flag that indicates if Chrome has to render images.
15+
use_proxy (str): use http proxy in <host:port> format.
1516
1617
Returns:
1718
selenium.webdriver.Chrome: created driver.
@@ -28,6 +29,8 @@ def chrome_driver(executable_path=None, run_headless=False,
2829
if not load_images:
2930
prefs = {'profile.managed_default_content_settings.images': 2}
3031
chrome_options.add_experimental_option('prefs', prefs)
32+
if use_proxy:
33+
chrome_options.add_argument('proxy-server=' + use_proxy)
3134
if executable_path:
3235
driver = webdriver.Chrome(chrome_options=chrome_options,
3336
executable_path=executable_path)
@@ -37,13 +40,14 @@ def chrome_driver(executable_path=None, run_headless=False,
3740

3841

3942
def firefox_driver(executable_path=None, run_headless=False,
40-
load_images=True):
43+
load_images=True, use_proxy=None):
4144
'''Function to initialize ``selenium.webdriver.Firefox`` with extended options
4245
4346
Args:
4447
executable_path (str): path to the ``geckdriver`` binary. If set to ``None`` selenium will search for ``geckdriver`` in ``$PATH``.
4548
run_headless (bool): boolean flag that indicates if ``geckodriver`` has to be headless (without GUI). ``geckodriver`` doesn't support native headless mode, that's why ``pyvirtualdisplay`` is used.
4649
load_images (bool): boolean flag that indicates if Firefox has to render images.
50+
use_proxy (str): use http proxy in <host:port> format.
4751
4852
Returns:
4953
selenium.webdriver.Firefox: created driver.
@@ -73,6 +77,13 @@ def firefox_driver(executable_path=None, run_headless=False,
7377
# Turns animated images off
7478
firefox_profile.set_preference(
7579
'thatoneguydotnet.QuickJava.startupStatus.AnimatedImage', 2)
80+
if use_proxy:
81+
_ = use_proxy.split(':')
82+
firefox_profile.set_preference('network.proxy.type', 1)
83+
firefox_profile.set_preference('network.proxy.http', _[0])
84+
firefox_profile.set_preference('network.proxy.http_port', int(_[1]))
85+
firefox_profile.set_preference('network.proxy.ssl', _[0])
86+
firefox_profile.set_preference('network.proxy.ssl_port', int(_[1]))
7687
if executable_path:
7788
driver = webdriver.Firefox(
7889
firefox_profile, executable_path=executable_path)

0 commit comments

Comments
 (0)