Holla,
I have a usercase where I need to store credentials in password manager of Chrome and other browsers. I tried using Playwright to achieve it but sadly, it’s not storing the user and password for a given site.
The way I want to make sure it works is by opening chrome after the execution and see that the password is stored in password manager.
I would appreciate help with it
The code (note, it’s only implamented for chrome currently, so I know that .. no need to let me know it’s not working with something else :)):
import argparse
from playwright.sync_api import sync_playwright
class BrowserAutomation:
def __init__(self, user_data_dir, username, password, browser_type='chromium', headless=True):
self.user_data_dir = user_data_dir
self.username = username
self.password = password
self.browser_type = browser_type
self.headless = headless
def load_passwords(self):
with sync_playwright() as p:
if self.browser_type == 'chromium':
browser = p.chromium.launch_persistent_context(self.user_data_dir, headless=self.headless, args=['--enable-features=PasswordImport','--password-store=basic'], channel="chrome")
elif self.browser_type == 'firefox':
browser = p.firefox.launch_persistent_context(self.user_data_dir, headless=self.headless)
elif self.browser_type == 'webkit':
browser = p.webkit.launch_persistent_context(self.user_data_dir, headless=self.headless)
elif self.browser_type == 'edge':
browser = p.chromium.launch_persistent_context(self.user_data_dir, headless=self.headless, channel='msedge')
else:
raise ValueError(f"Unsupported browser type: {self.browser_type}")
page = browser.new_page()
# Verify if the password was saved
page.goto('chrome://password-manager/passwords')
page.click('#addPasswordButton')
page.fill('input[aria-label="Site"]', 'https://www.google.com')
page.fill('input[aria-label="Username"]', self.username)
page.fill('input[aria-label="Password"]', self.password)
page.click('#addButton')
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Load passwords to browser.')
parser.add_argument('-data_dir', type=str, help='User data directory')
parser.add_argument('-u', type=str, help='Username for login')
parser.add_argument('-p', type=str, help='Password for login')
parser.add_argument('-browser', type=str, choices=['chromium', 'firefox', 'webkit', 'edge'], help='Type of browser')
parser.add_argument('--headless', action='store_true', help='Run browser in headless mode')
args = parser.parse_args()
automation = BrowserAutomation(user_data_dir=args.data_dir,
username=args.u,
password=args.p,
browser_type=args.browser,
headless=args.headless)
automation.load_passwords()
print("Browser automation and Flask server have both terminated.")