|
@@ -1,21 +1,29 @@
|
|
|
+"""
|
|
|
+Browser module
|
|
|
+"""
|
|
|
+
|
|
|
import os
|
|
|
import errno
|
|
|
+
|
|
|
from selenium_stealth import stealth
|
|
|
from selenium import webdriver
|
|
|
from selenium.webdriver.common.keys import Keys
|
|
|
from webbot import Browser
|
|
|
|
|
|
+
|
|
|
class StealthBrowser(Browser):
|
|
|
"""
|
|
|
-
|
|
|
**Constructor**
|
|
|
|
|
|
|
|
|
:__init__(showWindow = True , proxy = None):
|
|
|
- The constructor takes showWindow flag as argument which Defaults to False. If it is set to true , all browser happen without showing up any GUI window .
|
|
|
+ The constructor takes showWindow flag as argument which Defaults
|
|
|
+ to False. If it is set to true , all browser happen without
|
|
|
+ showing up any GUI window .
|
|
|
|
|
|
:Args:
|
|
|
- - showWindow : If true , will run a headless browser without showing GUI window.
|
|
|
+ - showWindow : If true , will run a headless browser without
|
|
|
+ showing GUI window.
|
|
|
- proxy : Url of any optional proxy server.
|
|
|
|
|
|
|
|
@@ -23,26 +31,33 @@ class StealthBrowser(Browser):
|
|
|
Object attributes: Key , errors
|
|
|
|
|
|
:Key:
|
|
|
- - It contains the constants for all the special keys in the keyboard which can be used in the *press* method
|
|
|
+ - It contains the constants for all the special keys in the keyboard
|
|
|
+ which can be used in the *press* method
|
|
|
errors:
|
|
|
- - List containing all the errors which might have occurred during performing an action like click ,type etc.
|
|
|
+ - List containing all the errors which might have occurred during
|
|
|
+ performing an action like click ,type etc.
|
|
|
"""
|
|
|
-
|
|
|
- def __init__(self, showWindow=True, proxy=None , downloadPath:str=None):
|
|
|
+ def __init__(self, showWindow=True, proxy=None, downloadPath:str=None):
|
|
|
options = webdriver.ChromeOptions()
|
|
|
options.add_argument("--disable-dev-shm-usage")
|
|
|
options.add_argument("--no-sandbox")
|
|
|
options.add_argument('--disable-web-security')
|
|
|
options.add_argument('--allow-running-insecure-content')
|
|
|
options.add_argument("user-agent=DN")
|
|
|
- options.add_experimental_option("excludeSwitches", ["enable-automation"])
|
|
|
+ options.add_experimental_option(
|
|
|
+ "excludeSwitches", ["enable-automation"]
|
|
|
+ )
|
|
|
options.add_experimental_option('useAutomationExtension', False)
|
|
|
- if downloadPath is not None and isinstance(downloadPath,str):
|
|
|
- absolutePath = os.path.abspath(downloadPath)
|
|
|
- if(not os.path.isdir(absolutePath)):
|
|
|
- raise FileNotFoundError(errno.ENOENT, os.strerror(errno.ENOENT), absolutePath)
|
|
|
-
|
|
|
- options.add_experimental_option('prefs', {'download.default_directory' : absolutePath})
|
|
|
+ if downloadPath is not None and isinstance(downloadPath, str):
|
|
|
+ absolute_path = os.path.abspath(downloadPath)
|
|
|
+ if not os.path.isdir(absolute_path):
|
|
|
+ raise FileNotFoundError(
|
|
|
+ errno.ENOENT, os.strerror(errno.ENOENT), absolute_path
|
|
|
+ )
|
|
|
+
|
|
|
+ options.add_experimental_option(
|
|
|
+ 'prefs', {'download.default_directory': absolute_path}
|
|
|
+ )
|
|
|
|
|
|
if proxy is not None and isinstance(proxy, str):
|
|
|
options.add_argument("--proxy-server={}".format(proxy))
|
|
@@ -53,25 +68,28 @@ class StealthBrowser(Browser):
|
|
|
self.driver = webdriver.Chrome(options=options)
|
|
|
self.Key = Keys
|
|
|
self.errors = []
|
|
|
- stealth(self.driver,
|
|
|
+ stealth(
|
|
|
+ self.driver,
|
|
|
languages=["en-US", "en"],
|
|
|
vendor="Google Inc.",
|
|
|
platform="Win32",
|
|
|
webgl_vendor="Intel Inc.",
|
|
|
renderer="Intel Iris OpenGL Engine",
|
|
|
fix_hairline=True,
|
|
|
- )
|
|
|
-
|
|
|
- [setattr(self, function, getattr(self.driver, function)) for function in
|
|
|
- ['add_cookie', 'delete_all_cookies', 'delete_cookie', 'execute_script', 'execute_async_script',
|
|
|
- 'fullscreen_window', 'get_cookie', 'get_cookies', 'get_log', 'get_network_conditions',
|
|
|
- 'get_screenshot_as_base64', 'get_screenshot_as_file', 'get_screenshot_as_png', 'get_window_position',
|
|
|
- 'get_window_rect', 'get_window_size', 'maximize_window', 'minimize_window', 'implicitly_wait', 'quit',
|
|
|
- 'refresh', 'save_screenshot', 'set_network_conditions', 'set_page_load_timeout', 'set_script_timeout',
|
|
|
- 'set_window_position', 'set_window_rect', 'start_client', 'start_session', 'stop_client', 'switch_to_alert']]
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+ )
|
|
|
+
|
|
|
+ for function in [
|
|
|
+ 'add_cookie', 'delete_all_cookies', 'delete_cookie',
|
|
|
+ 'execute_script', 'execute_async_script',
|
|
|
+ 'fullscreen_window', 'get_cookie', 'get_cookies',
|
|
|
+ 'get_log', 'get_network_conditions',
|
|
|
+ 'get_screenshot_as_base64', 'get_screenshot_as_file',
|
|
|
+ 'get_screenshot_as_png', 'get_window_position',
|
|
|
+ 'get_window_rect', 'get_window_size', 'maximize_window',
|
|
|
+ 'minimize_window', 'implicitly_wait', 'quit', 'refresh',
|
|
|
+ 'save_screenshot', 'set_network_conditions',
|
|
|
+ 'set_page_load_timeout', 'set_script_timeout',
|
|
|
+ 'set_window_position', 'set_window_rect', 'start_client',
|
|
|
+ 'start_session', 'stop_client', 'switch_to_alert'
|
|
|
+ ]:
|
|
|
+ setattr(self, function, getattr(self.driver, function))
|