Как написать более чистый код при добавлении файлов cookie в webdriver в python selenium

#python #selenium #cookies

#python #селен #файлы cookie

Вопрос:

Согласно документации по файлам cookie selenium. Ниже приведен способ добавления файлов cookie в драйвер

 from selenium import webdriver

driver = webdriver.Chrome()

driver.get("http://www.example.com")

# Adds the cookie into current browser context
driver.add_cookie({"name": "key", "value": "value"})
 

URL-адрес должен быть извлечен первым перед добавлением файлов cookie, что означает, что для просмотра желаемых изменений в URL-адресе после добавления файлов cookie сайт должен быть повторно извлечен.

таким образом, типичный вызов с файлами cookie будет выглядеть

 from selenium import webdriver

driver = webdriver.Chrome()

driver.get("http://www.example.com")

# Adds the cookie into current browser context
driver.add_cookie({"name": "key", "value": "value"})


# refetching the url again after adding the cookies
driver.get("http://www.example.com")
 

Я хочу знать, возможно ли добавить файлы cookie и увидеть желаемые изменения в URL-адресе без повторной выборки URL-адреса?
Или, короче говоря, можно ли сделать код более чистым и удалить один driver.get() вызов?

Примечание: добавление файлов cookie перед вызовом URL приведет Message: invalid cookie domain к ошибке

 Edit: since the site needs to be initially loaded, cookies with same name needs to be deleted before adding, this is another bump.
 

пример кода:

 from selenium import webdriver
from webdriver_manager import chrome
import json

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("www.example.com")
driver.delete_all_cookies()

with open('cookies.json', r) as fh:
  cstring = fh.read()
  jcookies = json.loads(cstring)
  
  for cookie in jcookies:
    driver.add_cookie({"name": cookie["name"], "value": cookie["value"]})
    
driver.get("www.example.com")
 

Ответ №1:

Вы можете использовать refresh метод

 driver.get(url)
driver.add_cookie({"name": "example", "value": "example"})
driver.refresh()
 

Ответ №2:

Ну да, вы можете отправить ключ F5 в тело, чтобы обновить сайт вместо повторного открытия, я полагаю, если вам не нужно перезапускать браузер, а только перезагружать сайт.