Как воссоздать сеансовые файлы cookie в WebDriver для защищенного ресурса IAP? - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь автоматизировать сайт, защищенный Identity-Aware Proxy (IAP) в Google Cloud Platform GCP. В настоящее время у меня есть доступ к учетной записи службы, на которую я могу отправлять запросы API с помощью токена OpenID.

При обычном входе в приложение (с именем пользователя и паролем) я вижу следующие файлы cookie:

GCP_IAAP_AUTH_TOKEN_<Some GUID here>

GCP_IAP_UID

Как можно ли использовать учетные данные учетной записи службы (доступны в файле json), чтобы воссоздать эти значения cook ie, чтобы я мог добавить их в свой веб-драйвер selenium?

1 Ответ

0 голосов
/ 30 марта 2020

Я решил эту проблему, используя BrowserMob-Proxy . Из их README:

BrowserMob Proxy allows you to manipulate HTTP requests and responses, capture HTTP content, and export performance data as a HAR file.

Для Python3 я сделал следующее:

Предварительные требования:

  • BrowserMob-Proxy установлен и работает

    Для Ма c Я использовал HomeBrew:

    ?> brew install browsermob-proxy
    ?> brew services start browsermob-proxy
    
  • Настройка локальной среды python3 с помощью pipenv (или вашего виртуального менеджера env)

    ?> brew install pipenv
    ?> pipenv --python 3.8
    ?> pipenv install browsermobproxy
    ?> pipenv install selenium
    ?> pipenv install ....
    
  • Возможность аутентификации с источником данных для вашей веб-страницы. Так как я использовал службу GCP, я следовал порядку, опубликованному в документации IAP, для получения токена аутентификации, найденного здесь: Аутентификация из учетной записи службы

Упрощенный код для добавление прокси:

from selenium.webdriver import ChromeOptions   
import browsermobproxy

# 1. Do whatever you need to do to get your token
token = get_auth_token()

# 2. Create browsermob client and add auth to headers
client = browsermobproxy.Client("localhost:9090") # port depends on your own setup
client.headers({"Authorization": "Bearer {}".format(token)})

# 3. Create browser (can vary wildly based on your own needs)
chrome_options = ChromeOptions()
chrome_options.add_argument("--ignore-certificate-errors") # I needed this, you may not
caps = chrome_options.to_capabilities()
client.add_to_capabilities(caps) # This is important!
# create driver instance with your capabilities
...