fix corrupt prefs when the file already exists
This commit is contained in:
parent
b2e804e977
commit
0bf986ee8b
|
@ -375,6 +375,7 @@ class Chrome(selenium.webdriver.chrome.webdriver.WebDriver):
|
||||||
config["profile"]["exit_type"] = None
|
config["profile"]["exit_type"] = None
|
||||||
fs.seek(0, 0)
|
fs.seek(0, 0)
|
||||||
json.dump(config, fs)
|
json.dump(config, fs)
|
||||||
|
fs.truncate() # the file might be shorter
|
||||||
logger.debug("fixed exit_type flag")
|
logger.debug("fixed exit_type flag")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.debug("did not find a bad exit_type flag ")
|
logger.debug("did not find a bad exit_type flag ")
|
||||||
|
|
|
@ -39,6 +39,20 @@ class ChromeOptions(_ChromiumOptions):
|
||||||
value = ChromeOptions._undot_key(rest, value)
|
value = ChromeOptions._undot_key(rest, value)
|
||||||
return {key: value}
|
return {key: value}
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _merge_nested(a, b):
|
||||||
|
"""
|
||||||
|
merges b into a
|
||||||
|
leaf values in a are overwritten with values from b
|
||||||
|
"""
|
||||||
|
for key in b:
|
||||||
|
if key in a:
|
||||||
|
if isinstance(a[key], dict) and isinstance(b[key], dict):
|
||||||
|
ChromeOptions._merge_nested(a[key], b[key])
|
||||||
|
continue
|
||||||
|
a[key] = b[key]
|
||||||
|
return a
|
||||||
|
|
||||||
def handle_prefs(self, user_data_dir):
|
def handle_prefs(self, user_data_dir):
|
||||||
prefs = self.experimental_options.get("prefs")
|
prefs = self.experimental_options.get("prefs")
|
||||||
if prefs:
|
if prefs:
|
||||||
|
@ -55,7 +69,7 @@ class ChromeOptions(_ChromiumOptions):
|
||||||
prefs_file = os.path.join(default_path, "Preferences")
|
prefs_file = os.path.join(default_path, "Preferences")
|
||||||
if os.path.exists(prefs_file):
|
if os.path.exists(prefs_file):
|
||||||
with open(prefs_file, encoding="latin1", mode="r") as f:
|
with open(prefs_file, encoding="latin1", mode="r") as f:
|
||||||
undot_prefs.update(json.load(f))
|
undot_prefs = self._merge_nested(json.load(f), undot_prefs)
|
||||||
|
|
||||||
with open(prefs_file, encoding="latin1", mode="w") as f:
|
with open(prefs_file, encoding="latin1", mode="w") as f:
|
||||||
json.dump(undot_prefs, f)
|
json.dump(undot_prefs, f)
|
||||||
|
|
Loading…
Reference in New Issue