[*] открытые списки: https://publicworks.pima.gov/inspections
Нажмите на ссылку на запись, которая идет на страницу Accela, как:
/>https://aca-prod.accela.com/pima/cap/ca ... ..образной Это открывает новую вкладку на страницу параметров отчета Accela:
https://aca-prod.accela.com/pima/report ... ycode=pima> < /ul>
эта страница затем загружает фактический PDF с: < /strong>
https://aca-prod.accela.com/pima/report ... ycode=pima> в Browser Is Is Is Wise Pdf Render Prender Prender. Мой сетевой журнал также показывает ответ PDF: < /p>
Код: Выделить всё
RESP 200 https://aca-prod.accela.com/PIMA/Report/ShowReport.aspx?Module=Building&reportType=PRINT_PERMIT_SUMMARY_REPORT&reportID=762&agencyCode=PIMA | ct=application/pdf cl=160319
< /code>
… Но мой код никогда не сохраняет байты, это очень расстраивает. CackDownloads = true
< /ul>
Минимальный код, который воспроизводит < /p>
Код: Выделить всё
from pathlib import Path
from playwright.sync_api import sync_playwright
BASE = "https://publicworks.pima.gov/inspections"
DOWNLOADS = Path("downloads"); DOWNLOADS.mkdir(exist_ok=True)
def is_pdf_response(resp):
return ("Report/ShowReport.aspx" in resp.url
and "application/pdf" in (resp.headers.get("content-type","").lower()))
with sync_playwright() as p:
browser = p.chromium.launch(channel="chrome", headless=False)
ctx = browser.new_context(accept_downloads=True) # inline PDF, so this never fires
page = ctx.new_page()
# (1) Go to listings and click Prev until rows exist (omitted for brevity)
page.goto(BASE)
# (2) Click a record link -> record details page (omitted: selector resolution)
# page.click("a[href*='CapDetail.aspx']")
# (3) Click "View inspection summary" which opens a new tab
with ctx.expect_page() as new_page_info:
page.click("a#ctl00_PlaceHolderMain_lnkPrintSummary") # link text/ID varies, but this opens the tab
pdf_tab = new_page_info.value
# (4) The parameter page loads, then the PDF URL is fetched by the site.
# Try to catch the actual PDF response:
caught = {"saved": False}
def on_response(resp):
if is_pdf_response(resp):
# Attempt 1: save body() from the response we just saw
content = resp.body() #
Подробнее здесь: [url]https://stackoverflow.com/questions/79752888/playwright-python-pdf-renders-in-new-tab-200-application-pdf-but-i-can-t-save[/url]