Übergeben von SameSite Chrome Flags an den Selenium Remote-Server

Sep 12 2020

Ich führe automatisierte Tests auf einem Selenium-Remote-Server in Python durch. Der Remote-Selenium-Server wird in einem Docker-Container ausgeführt. Ich erhalte meinen Selenium-Treiber mit folgendem Code:

options = webdriver.ChromeOptions()
options.add_argument("--headless")
driver = webdriver.Remote(command_executor='http://127.0.0.1/wd/hub', options=options)
driver.get('http://127.0.0.1:8000')
# ...
driver.close()

Ich möchte zwei Chrome-Flags ( # Cookies für dieselbe Site standardmäßig und # Cookies ohne dieselbe Site muss sicher sein ) an die Selenium Chrome-Instanz übergeben. Nach einigen Recherchen scheint es, dass ich diese Flags durch Ausführen an einen neuen Chrome-Prozess übergeben würde:

/usr/bin/google-chrome-stable --flag-switches-begin --disable-features=CookiesWithoutSameSiteMustBeSecure,SameSiteByDefaultCookies --flag-switches-end

Ich habe versucht, diese Argumente wie folgt zum Selenium- ChromeOptionsObjekt hinzuzufügen :

options = webdriver.ChromeOptions()
options.add_argument("--headless")
options.add_argument("--flag-switches-begin")
options.add_argument("--disable-features=CookiesWithoutSameSiteMustBeSecure,SameSiteByDefaultCookies")
options.add_argument("--flag-switches-end")
# ... snip ...

Leider scheint dies keine Auswirkungen auf die Selenium Chrome-Browserinstanz zu haben. Wie kann ich den Selenium-Browser mit diesen Flags neu konfigurieren? Muss ich diese Argumente irgendwie an den Docker-Container übergeben?

Antworten

2 Jortega Sep 12 2020 at 04:04

Ich denke, diese Linie macht nicht das, was Sie erwarten options.add_argument("--disable-features=CookiesWithoutSameSiteMustBeSecure,SameSiteByDefaultCookies")

CookiesWithoutSameSiteMustBeSecure vs. Cookies ohne dieselbe Site müssen sicher sein

Stellen Sie Ihre Chromoptionen folgendermaßen ein:

from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
# experimentalFlags = ['CookiesWithoutSameSiteMustBeSecure','SameSiteByDefaultCookies']
flags_i_want = ['cookies-without-same-site-must-be-secure@1', 'same-site-by-default-cookies@1']
chromeLocalStatePrefs = { 'browser.enabled_labs_experiments': flags_i_want}
chrome_options.add_experimental_option('localState',chromeLocalStatePrefs)
driver = webdriver.Chrome(executable_path=r'C:\\Path\\To\\chromedriver.exe', options=chrome_options)

driver.get("https://www.google.com")
1 Benjamin Sep 12 2020 at 08:28

Ich habe das mit Jortegas Hilfe zum Laufen gebracht. Der folgende Code deaktiviert die experimentellen Chrome-Flags von SameSite auf einem Remote-Selenium-Server wie gewünscht:

options = webdriver.ChromeOptions()

# Disable experimental features:
chrome_local_state_prefs = {
    "browser": {
        "enabled_labs_experiments": [
            "cookies-without-same-site-must-be-secure@2",
            "same-site-by-default-cookies@2",
        ],
    }
}
options.add_experimental_option("localState", chrome_local_state_prefs)

driver = webdriver.Remote(command_executor='http://127.0.0.1/wd/hub', options=options)
driver.get('http://127.0.0.1:8000')
# ...
driver.close()