драматург Python не может получить страницы API с помощью файлов cookie
У меня есть два скрипта на питоне:
войти >> перейдите на веб-сайт, войдите в систему с помощью формы входа и сохраните файлы cookie в файле JSON для дальнейшего использования
import json
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(slow_mo=50)
context = browser.new_context(user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36')
page = context.new_page()
page.goto('https://www.url.us/signin')
try:
page.wait_for_selector('#signInFormPage input[name="userName"]', state='visible')
page.type('#signInFormPage input[name="userName"]', "aaa")
page.type('#signInFormPage input[name="password"]', "aa")
page.click('#userNamePasswordSignInButton')
page.wait_for_timeout(3000)
cookies = context.cookies()
page.wait_for_timeout(10000)
f = open('./cookies.json', 'w')
f.write(json.dumps(cookies))
page.close()
context.close()
browser.close()
except Exception as e:
print("Error in playwright script.")
page.close()
context.close()
browser.close()
Этот сценарий работает нормально. Второй сценарий - получить сохраненные файлы cookie из файла и распечатать исходную страницу других страниц того же веб-сайта:
import json
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False, slow_mo=50)
context = browser.new_context(user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36')
page = context.new_page()
cookie_file = open('./cookies.json')
cookies = json.load(cookie_file)
context.add_cookies(cookies)
page.goto('https://www.url.us/Product/10aaa')
try:
page.wait_for_timeout(6000)
print(page.content())
page.close()
except Exception as e:
print("Error in playwright script.")
page.close()
И этот скрипт тоже неплохо работает.
Но проблема в том, что на этом веб-сайте есть API для некоторой информации, которую я хочу извлечь, и что информация недоступна через источник страницы, видимый как пользовательский интерфейс. Итак, когда я помещаю ссылку API во вторую ссылку, я получаю пустую страницу JSON. Эти запросы API используют значение токена, но поскольку я использую файлы cookie для получения источника страницы, у меня нет токена. Я использую эти скрипты, потому что это был единственный способ пройти через защиту Cloudflare, которая есть на этом веб-сайте. Есть ли способ, которым я могу, например, использовать модуль запросов с комбинацией модуля драматурга? Или любые другие предложения, которые могут быть полезны в этой ситуации, как я могу получить страницу JSON с помощью файлов cookie?
обновленный код с использованием постоянного контекста:
1скрипт:
import json
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch_persistent_context(r'C:\Users\test\Downloads\pyyy', headless=False)
page = browser.new_page()
page.goto('https://www.url.us/signin')
try:
page.wait_for_selector('#signInFormPage input[name="userName"]', state='visible')
page.type('#signInFormPage input[name="userName"]', "aaaaa")
page.type('#signInFormPage input[name="password"]', "aaaa")
page.click('#userNamePasswordSignInButton')
page.wait_for_timeout(3000)
page.close()
except Exception as e:
print("Error in playwright script.")
page.close()
2:
import json
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch_persistent_context(r'C:\Users\test\Downloads\pyyy', headless=False)
page = browser.new_page()
page.goto('https://www.url.us/Product/aaa')
try:
page.wait_for_timeout(6000)
print(page.content())
page.close()
except Exception as e:
print("Error in playwright script.")
page.close()
1 ответ
Вместо того, чтобы сохранять и загружать файлы cookie, я бы запустил постоянный контекст . Этот постоянный контекст сохранит информацию в
user_data_dir
Вы предоставляете.