С помощью следующего кода и существующего окна отладки Chrome я пытаюсь получить отчет, но получаю своего рода временный файл, который невозможно сохранить. в моем браузере:
странный файл
Нажатие кнопки напрямую не работает, поэтому я хотел использовать метод page.evaluate:
Код: Выделить всё
from playwright.sync_api import sync_playwright
def run(playwright):
browser = playwright.chromium.connect_over_cdp('http://localhost:9222')
context = browser.contexts[0]
page = context.pages[0]
with page.expect_download() as download_info:
page.evaluate("""
fetch('https://www.ice.com/marketdata/api/reports/166/download/pdf', {
method: 'POST',
headers: {
'sec-ch-ua-platform': '"Windows"',
'referer': 'https://www.ice.com/report/166',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
'sec-ch-ua': '"Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"',
'content-type': 'application/x-www-form-urlencoded',
'sec-ch-ua-mobile': '?0'
},
body: new URLSearchParams({
'exchangeCodeAndContract': 'IFLX,C',
'selectedDate': '2025-01-02'
})
}).then(response => response.blob())
.then(blob => {
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.style.display = 'none';
a.href = url;
a.download = 'report.pdf';
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
});
""")
download = download_info.value
download.save_as('test.pdf')
try:
while True:
pass
except KeyboardInterrupt:
print("Program terminated by user.")
finally:
page.close()
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
Спасибо
Лоран
Подробнее здесь: https://stackoverflow.com/questions/793 ... orary-file
Мобильная версия