2.2.1 Fixed issue where arguments were not passed along to chrome. Some small improvements for v2 headless, which is still detectable, but it's getting better....,
This commit is contained in:
parent
853f299967
commit
b3484a8b7e
2
setup.py
2
setup.py
|
@ -16,7 +16,7 @@ from setuptools import setup
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name="undetected-chromedriver",
|
name="undetected-chromedriver",
|
||||||
version="2.2.0",
|
version="2.2.1",
|
||||||
packages=["undetected_chromedriver"],
|
packages=["undetected_chromedriver"],
|
||||||
install_requires=["selenium",],
|
install_requires=["selenium",],
|
||||||
url="https://github.com/ultrafunkamsterdam/undetected-chromedriver",
|
url="https://github.com/ultrafunkamsterdam/undetected-chromedriver",
|
||||||
|
|
|
@ -170,7 +170,8 @@ class Chrome(object):
|
||||||
self.options = options
|
self.options = options
|
||||||
self.user_data_dir = user_data_dir
|
self.user_data_dir = user_data_dir
|
||||||
|
|
||||||
extra_args = []
|
extra_args = options.arguments
|
||||||
|
|
||||||
if options.headless:
|
if options.headless:
|
||||||
extra_args.append("--headless")
|
extra_args.append("--headless")
|
||||||
extra_args.append("--window-size=1920,1080")
|
extra_args.append("--window-size=1920,1080")
|
||||||
|
@ -191,7 +192,7 @@ class Chrome(object):
|
||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
stderr=subprocess.PIPE,
|
stderr=subprocess.PIPE,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.webdriver = selenium.webdriver.chrome.webdriver.WebDriver(
|
self.webdriver = selenium.webdriver.chrome.webdriver.WebDriver(
|
||||||
executable_path=p.target_path,
|
executable_path=p.target_path,
|
||||||
port=port,
|
port=port,
|
||||||
|
@ -207,7 +208,10 @@ class Chrome(object):
|
||||||
|
|
||||||
orig_get = self.webdriver.get
|
orig_get = self.webdriver.get
|
||||||
|
|
||||||
|
logger.info("setting properties for headless")
|
||||||
|
|
||||||
def get_wrapped(*args, **kwargs):
|
def get_wrapped(*args, **kwargs):
|
||||||
|
|
||||||
if self.execute_script("return navigator.webdriver"):
|
if self.execute_script("return navigator.webdriver"):
|
||||||
self.execute_cdp_cmd(
|
self.execute_cdp_cmd(
|
||||||
"Page.addScriptToEvaluateOnNewDocument",
|
"Page.addScriptToEvaluateOnNewDocument",
|
||||||
|
@ -224,10 +228,20 @@ class Chrome(object):
|
||||||
: target[key]
|
: target[key]
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Object.defineProperty(Notification, "permission", {
|
||||||
|
configurable: true,
|
||||||
|
enumerable: true,
|
||||||
|
get: () => {
|
||||||
|
return "unknown"
|
||||||
|
},
|
||||||
|
});
|
||||||
"""
|
"""
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
logger.info("removing headless from user-agent string")
|
||||||
|
|
||||||
self.execute_cdp_cmd(
|
self.execute_cdp_cmd(
|
||||||
"Network.setUserAgentOverride",
|
"Network.setUserAgentOverride",
|
||||||
{
|
{
|
||||||
|
@ -236,21 +250,22 @@ class Chrome(object):
|
||||||
).replace("Headless", "")
|
).replace("Headless", "")
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
logger.info("fixing notifications permission in headless browsers")
|
||||||
|
|
||||||
|
if emulate_touch:
|
||||||
|
self.execute_cdp_cmd(
|
||||||
|
"Page.addScriptToEvaluateOnNewDocument",
|
||||||
|
{
|
||||||
|
"source": """
|
||||||
|
Object.defineProperty(navigator, 'maxTouchPoints', {
|
||||||
|
get: () => 1
|
||||||
|
})"""
|
||||||
|
},
|
||||||
|
)
|
||||||
return orig_get(*args, **kwargs)
|
return orig_get(*args, **kwargs)
|
||||||
|
|
||||||
self.webdriver.get = get_wrapped
|
self.webdriver.get = get_wrapped
|
||||||
|
|
||||||
if emulate_touch:
|
|
||||||
self.execute_cdp_cmd(
|
|
||||||
"Page.addScriptToEvaluateOnNewDocument",
|
|
||||||
{
|
|
||||||
"source": """
|
|
||||||
Object.defineProperty(navigator, 'maxTouchPoints', {
|
|
||||||
get: () => 1
|
|
||||||
})"""
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
def __getattribute__(self, attr):
|
def __getattribute__(self, attr):
|
||||||
try:
|
try:
|
||||||
return object.__getattribute__(self, attr)
|
return object.__getattribute__(self, attr)
|
||||||
|
@ -263,13 +278,11 @@ class Chrome(object):
|
||||||
def __dir__(self):
|
def __dir__(self):
|
||||||
return object.__dir__(self) + object.__dir__(self.webdriver)
|
return object.__dir__(self) + object.__dir__(self.webdriver)
|
||||||
|
|
||||||
|
|
||||||
def start_session(self, capabilities=None, browser_profile=None):
|
def start_session(self, capabilities=None, browser_profile=None):
|
||||||
if not capabilities:
|
if not capabilities:
|
||||||
capabilities = self.options.to_capabilities()
|
capabilities = self.options.to_capabilities()
|
||||||
self.webdriver.start_session(capabilities, browser_profile)
|
self.webdriver.start_session(capabilities, browser_profile)
|
||||||
|
|
||||||
|
|
||||||
def get_in(self, url: str, delay=2, factor=1):
|
def get_in(self, url: str, delay=2, factor=1):
|
||||||
"""
|
"""
|
||||||
:param url: str
|
:param url: str
|
||||||
|
@ -310,7 +323,13 @@ class Chrome(object):
|
||||||
self.start_session()
|
self.start_session()
|
||||||
|
|
||||||
def quit(self):
|
def quit(self):
|
||||||
|
logger.debug("closing webdriver")
|
||||||
try:
|
try:
|
||||||
|
self.webdriver.quit()
|
||||||
|
except Exception: # noqa
|
||||||
|
pass
|
||||||
|
try:
|
||||||
|
logger.debug("killing browser")
|
||||||
self.browser.kill()
|
self.browser.kill()
|
||||||
self.browser.wait(1)
|
self.browser.wait(1)
|
||||||
except TimeoutError as e:
|
except TimeoutError as e:
|
||||||
|
@ -318,12 +337,10 @@ class Chrome(object):
|
||||||
except Exception: # noqa
|
except Exception: # noqa
|
||||||
pass
|
pass
|
||||||
try:
|
try:
|
||||||
self.webdriver.quit()
|
logger.debug("removing profile : %s" % self.user_data_dir)
|
||||||
except Exception: # noqa
|
|
||||||
pass
|
|
||||||
try:
|
|
||||||
shutil.rmtree(self.user_data_dir, ignore_errors=False)
|
shutil.rmtree(self.user_data_dir, ignore_errors=False)
|
||||||
except PermissionError:
|
except PermissionError:
|
||||||
|
logger.debug("permission error. files are still in use/locked. retying...")
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
self.quit()
|
self.quit()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue