Извлечение навыков и профессионального опыта из профилей платформы карьерных сетейPython

Программы на Python
Anonymous
Извлечение навыков и профессионального опыта из профилей платформы карьерных сетей

Сообщение Anonymous »

Я автоматизирую вход на сеансовый веб-сайт с помощью Playwright, а затем повторно использую извлеченные файлы cookie в библиотеке запросов Python для вызова защищенной конечной точки API. Вход в систему работает нормально, но вызов моего запроса возвращает 403 Forbidden.
Что я делаю
После успешного входа в систему Драматурга я извлекаю определенные файлы cookie и создаю заголовки следующим образом:
python

Код: Выделить всё

# Extract cookies after Playwright login
all_cookies = {c["name"]: c["value"] for c in context.cookies()}
COOKIES = {k: all_cookies[k] for k in REQUIRED_KEYS if k in all_cookies}

# Build headers — csrf-token comes from a cookie value
HEADERS = {
"accept": "application/json",
"csrf-token": COOKIES.get("CSRF_COOKIE", ""),
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36",
}

# Make the authenticated request
response = requests.get(
"https://example.com/api/data",
headers=HEADERS,
cookies=COOKIES
)
print(response.status_code)  # Returns 403
Проблема
Ответ 403 Запрещено, хотя:
  • Вход в Playwright успешен (браузер успешно перенаправляется на главный канал)
  • Файл cookie токена сеанса присутствует и извлекается правильно
  • Заголовок csrf-token устанавливается на основе значения файла cookie
Что я пробовал
  • Передача всех файлов cookie напрямую из context.cookies() — тот же результат 403
  • Фильтрация только необходимых сеанс + файлы cookie CSRF — по-прежнему 403
  • Использование request.Session() и загрузка в него файлов cookie — по-прежнему 403
  • Драматург иногда заключает значения файлов cookie в дополнительные кавычки, например «\"value\"» — я удаляю их вручную, но не уверен, что это вызывает проблему
Мой код очистки файлов cookie:
python

Код: Выделить всё

def clean(v):
v = v.strip()
if v.startswith('"') and v.endswith('"'):
try:
return json.loads(v)
except Exception:
return v.strip('"')
return v

all_cookies = {c["name"]: clean(c["value"]) for c in context.cookies()}
Вопрос
Как передать файлы cookie сеанса Playwright в вызов запросов, чтобы сервер принял их как действительный сеанс с аутентификацией?

Вернуться в «Python»