драматург 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Вы предоставляете.

Другие вопросы по тегам