My code:
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
opts = Options()
opts.add_argument("user-data-dir=/path/to/profiles_dir/user_id")
browser = webdriver.Chrome("/usr/lib/chromium-browser/chromedriver", chrome_options=opts)
When I start Chromium for user with id = 1 it starts fine and creates a profile directory /path/to/profiles_dir/1. Then I visit some arbitrary site and close the browser. When I execute the above code for the second time, it throws and exception.
selenium.common.exceptions.WebDriverException: Message: unknown error: cannot parse internal JSON template: Line: 1, column: 1, Unexpected token. (Driver info: chromedriver=2.35.528139 (47ead77cb35ad2a9a83248b292151462a66cd881),platform=Linux 4.4.0-112-generic x86_64)
Chromium 64.0.3282.119 Built on Ubuntu , running on Ubuntu 16.04
ChromeDriver 2.35
selenium 3.8.1
I googled a lot but could not find a solution for this issue. Why can't I load the browser with the existing user profile dir? What am I doing wrong?
There seems to be a bug in chromedriver. I narrowed it down, and two files seem to be the culprit: {user-data-dir}/Local State
and {user-data-dir}/{profile-directory}/Preferences
.
If you do not specify profile-directory
, it will be 'Default'.
Chrome/Chromium doesn't seem to be able to read these files, even if you properly close chromedriver, using browser.quit()
.
You'll need to delete the files in order to be able to start chromedriver again, using the same profile.
I used the following code in my finally
block, in order to delete the files:
if browser is not None:
browser.quit()
time.sleep(1)
delete_paths = ['../selenium/chrome_profile/Local State',
'../selenium/chrome_profile/Default/Preferences']
for delete_path in delete_paths:
if os.path.exists(delete_path):
os.remove(delete_path)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With