Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The fastest way to find a PDF URL is to inspect the page’s rendered HTML for an <a href>, <object data>, <embed src>, or <iframe src> that points to the file. If the URL is created only after a click, record the request in your browser’s Network panel instead. Always test the copied address in a new tab: a viewer page, temporary blob URL, or login-bound request is not the same thing as a reusable PDF link.

What counts as a PDF URL?

A direct PDF URL identifies the PDF resource itself, commonly ending in .pdf but not necessarily. It can include a query string, such as https://example.com/report.pdf?download=1. A viewer URL may display the document while hiding the file request behind an embedded application. A fragment such as #page=4 is optional navigation metadata; the file URL is the part before the hash. Adobe documents this page-link syntax at https://helpx.adobe.com/acrobat/kb/link-html-pdf-page-acrobat.html.

  • Reusable public URL: works in a new browser or command-line request without the original session.
  • Authenticated or signed URL: may require cookies, a token, or an expiry time.
  • Blob URL: a local browser object reference (for example, blob:https://site.example/...), not a durable public address.
  • Viewer URL: the web application that displays the PDF, which may make a separate request for the actual file.

Method 1: Inspect the rendered HTML

Use this method when a download or document link is already present on the page. Inspect shows the DOM after scripts have modified it, whereas View Source shows the original response. Google explains the difference in its Search Console documentation: https://support.google.com/webmasters/answer/11626894?hl=en.

  1. Open the webpage in Chrome, Edge, Firefox, or another modern browser.
  2. Right-click near the document link and choose Inspect (or press Ctrl+Shift+I on Windows/Linux or Cmd+Option+I on macOS).
  3. In the Elements or Inspector panel, press Ctrl+F/Cmd+F and search for .pdf, href, src, data, download, object, embed, or iframe.
  4. Examine each matching element and copy the complete attribute value, including its query string.
  5. If the value is relative, resolve it against the page URL. In JavaScript, new URL(href, document.baseURI).href produces the absolute address.

Ordinary anchor links

The usual pattern is an anchor such as <a href="/files/guide.pdf">Download PDF</a>. The href can be absolute or relative. MDN describes the anchor element and link resolution at https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/a and https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Structuring_content/Creating_links.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

In the console, you can list and resolve every anchor on the current page:

Array.from(document.querySelectorAll('a[href]'))
  .map(a => ({text: a.innerText.trim(), url: new URL(a.getAttribute('href'), document.baseURI).href}))
  .filter(x => /.pdf(?:$|[?#])/i.test(x.url));

This catches uppercase extensions and URLs with parameters after the extension. A site may instead use a download endpoint such as /download?id=123; inspect the link target and validate its response rather than relying only on the filename.

Embedded PDF elements

PDFs embedded directly in a page commonly use:

<object data="/docs/manual.pdf" type="application/pdf"></object>
<embed src="https://example.com/manual.pdf" type="application/pdf">
<iframe src="/viewer?file=%2Fdocs%2Fmanual.pdf"></iframe>

Copy data from object and src from embed or iframe, then resolve relative values with the document URL. MDN documents these attributes at https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/iframe and https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/embed. An iframe may contain only a viewer shell, so continue with the Network method if opening its URL does not return the PDF.

Method 2: Find a dynamically generated PDF in Network

Use Network recording when the link appears only after JavaScript runs, when a button opens a viewer, or when Elements contains no file URL.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  1. Open DevTools and select Network. Keep recording enabled (the red record icon).
  2. Reload the page with DevTools open. A hard reload may be needed if the browser serves the document from cache.
  3. Activate the PDF, preview, or Download control.
  4. Filter requests by pdf, document, or MIME type application/pdf. In Chrome, use the filter box and inspect the Type column.
  5. Select a likely request and review Headers, especially Request URL, Status, and Content-Type. A direct file normally returns application/pdf; a viewer may return HTML or JavaScript.
  6. Right-click the request and choose Copy → Copy URL (wording varies by browser). Paste it into a new private or normal tab to test.

Chrome’s DevTools documentation explains how loaded resources are exposed in the Sources and related panels at https://developer.chrome.com/docs/devtools/sources. Google also notes that script-generated links may not appear as ordinary crawlable anchors at https://developers.google.com/search/docs/crawling-indexing/links-crawlable.

Preserve the request context

Copy the complete URL exactly. Do not remove query parameters: they may carry a document identifier, access signature, language, or download disposition. If the request succeeds only while logged in, the URL is session-bound even when it looks public. Use DevTools’ Copy as cURL when you need to reproduce headers and cookies for troubleshooting; treat exported cookies and authorization headers as secrets and do not publish them.

Validate that you found the file, not just the viewer

  1. Open the candidate in a new tab. Confirm the intended document, not a login page, error page, or generic viewer.
  2. Check the address bar after redirects. The final URL may differ from the copied request.
  3. In Network, verify the response’s Content-Type is application/pdf. Some servers deliver a PDF with a URL that has no .pdf suffix.
  4. Try a fresh private window if the link is supposed to be public. Failure there indicates authentication, referrer checks, an expiring signature, or a required cookie.
  5. For automation, issue a HEAD request only if the server supports it; otherwise use a normal GET and inspect headers without assuming the filename.

A URL that starts with blob: is generated inside your browser and cannot normally be shared. Find the underlying Network request instead. A URL containing #page=4 opens a page-specific position, but remove the fragment when you need the file address itself.

Common cases and the right place to look

What you see Where the URL usually is What to do
Visible “Download PDF” link <a href> Inspect and resolve the href.
PDF displayed inside the page object[data], embed[src], or iframe[src] Copy the attribute, then verify it is the file rather than a viewer.
Button opens a new tab or modal Network request after the click Record, reload, click, and copy the PDF request URL.
Only a blob: address appears Browser-created object Use Network to locate the source response.
URL works once and then fails Signed or session-bound request Preserve the session or obtain a stable public link from the site owner.

Troubleshooting

No “.pdf” match appears

The server may use a download endpoint without a file extension, encode the URL, or create it at runtime. Search for application/pdf in Network, inspect iframe requests, and click the control while recording.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The copied link opens an HTML viewer

Inspect the viewer’s Network activity while it loads. The actual PDF is often a second request. Filter by MIME type and copy that request rather than the viewer shell.

The request returns 403 or redirects to login

Authentication, an expiring signature, a required referrer, or cookies are likely involved. Reproduce the request in the same session, do not strip parameters, and ask the publisher for a public download URL if you need a durable link.

The PDF is blank or incomplete

Wait for the page and document request to finish before copying. Check whether the site requests page ranges or an alternate rendition. A failed or partial response is not a valid reusable URL.

The URL contains encoded characters

Keep percent-encoding exactly as captured. Decoding and re-encoding by hand can change a signature or identifier. Resolve relative paths with the browser’s URL parser rather than string concatenation.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Or skip the browser setup

If your goal is to capture a webpage or document-like page programmatically rather than manually discover its embedded request, ScreenshotNeo provides a website screenshot API and MCP server. It accepts a URL and returns PNG, JPEG, WebP, or PDF output. Cookie and consent banners, newsletter popups, and chat widgets are removed before capture; bot checks, blank pages, timeouts, failed loads, and cache hits are not billed, and response headers identify the page verdict and billing status.

For a one-call capture, see the ScreenshotNeo documentation:

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

It also offers an MCP server for AI agents, including Claude, Cursor, and other MCP clients, with take_screenshot, get_page_info, and capture_pdf tools. The Free plan includes 1,000 shots per month with no card; paid plans start at $5 for 3,000 shots. Other options include full-page capture, CSS-selector element capture, device and retina settings, PDF paper and page controls, custom headers and cookies, waiting rules, request blocking, caching, signed links, webhooks, bulk capture, and a usage API.

Create a free ScreenshotNeo account to use the 1,000-shot allowance without entering a card.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Python and Node.js alternatives

When you need to automate a direct URL you have already identified, these complete requests save the response as a file. They do not bypass authentication or turn a viewer URL into a PDF.

Python

import requests

url = "https://example.com/report.pdf"
r = requests.get(url, timeout=30)
r.raise_for_status()
print(r.headers.get("content-type"))
with open("report.pdf", "wb") as f:
    f.write(r.content)

Node.js

const res = await fetch('https://example.com/report.pdf');
if (!res.ok) throw new Error(`${res.status} ${res.statusText}`);
const type = res.headers.get('content-type');
console.log(type);
const data = Buffer.from(await res.arrayBuffer());
require('fs').writeFileSync('report.pdf', data);

For a ScreenshotNeo capture specifically, the supplied Node.js call is:

const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);

Practical checklist

  • Inspect rendered Elements before relying on View Source.
  • Check href, data, src, and download attributes.
  • Resolve relative URLs against document.baseURI.
  • Use Network recording for JavaScript, viewers, and blob URLs.
  • Preserve query strings, encoding, cookies, and authorization context.
  • Verify the response and content type in a fresh tab.
  • Label signed, temporary, or login-bound URLs as non-public and non-durable.

Frequently Asked Questions

Can I find a PDF URL from View Source alone?

Sometimes, but only when the original HTML contains the link. JavaScript-generated links and viewer requests may appear only in the rendered DOM or Network panel.

Is a URL ending in .pdf always the real file?

No. A viewer can use a .pdf-looking path, and a real PDF can use a URL without that suffix. Verify the response and Content-Type.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Can I share a blob URL?

Usually not. A blob URL belongs to the current browser context; find and share the underlying network resource instead.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.