我正在Python中的Selenium远程服务器上运行自动测试。远程Selenium服务器在docker容器中运行。我用以下代码获得了Selenium驱动程序:
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()
我想将两个Chrome标志(#默认情况下为同一站点的cookie和#cookies如果没有同一站点,则必须是安全的(传递给Selenium Chrome实例。经过一些研究,我似乎会通过运行将这些标志传递给一个新的Chrome进程
/usr/bin/google-chrome-stable --flag-switches-begin --disable-features=CookiesWithoutSameSiteMustBeSecure,SameSiteByDefaultCookies --flag-switches-end
我尝试将这些参数添加到SeleniumChromeOptions
对象中,如下所示:
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 ...
不幸的是,这似乎对SeleniumChrome浏览器实例没有任何影响。如何使用这些标志重新配置Selenium浏览器?我是否需要以某种方式将这些参数传递到docker容器?
我认为这一行没有达到您所期望的options.add_argument("--disable-features=CookiesWithoutSameSiteMustBeSecure,SameSiteByDefaultCookies")
cookies without SameSiteMustBeSecure与没有相同站点的cookies必须是安全的
设置您的铬选项如下:
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")
我在Jortega的帮助下完成了这项工作。以下代码根据需要禁用远程Selenium服务器上的SameSite实验Chrome标志:
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()