Playwright doesn't seem to intercept the requests unless I specify exactly the URL i want to block
const primaryStreamURL = await getElementById(page, "PrimaryStreamURL").evaluate(
(el: HTMLInputElement) => el.value
);
if (!primaryStreamURL) throw new Error("Primary stream URL is empty");
const primaryOrigin = new URL(primaryStreamURL).origin;
await page.route(`${primaryOrigin}/*`, async (route) => {
console.log(route.request().url()); // Never gets console logged
await route.abort("connectionclosed");
});
The URL is like this https://something.net/*
.
If I write it like this https://something.net/media.u3m8
it works. but there are another files that get downloaded and I need to intercept all of them, so adding a specific URL is not an option
This thread is trying to answer question "Why doesn't Playwright intercept requests with a wildcard '*' in 'page.route()' function and how can it be fixed?"
Related Ask AI answer for "How do I use the wildcard '*' in the 'page.route()' function of Playwright to intercept all requests from a specific origin?".
You can intercept all requests from a specific origin in Playwright using the wildcard '*' in the page.route()
function. Here's how you can do it:
await page.route('https://ray.run/*', route => {
// Your interception logic goes here
});
In this code, any request made to URLs starting with "https://ray.run/" will be intercepted. You can then define your own logic inside the route handler function to handle these intercepted requests.
For example, if you want to block all requests from that origin, you can use route.abort()
:
await page.route('https://ray.run/*', route => {
route.abort();
});
Alternatively, if you want to modify or fulfill these intercepted requests, you can use route.fulfill()
and provide a custom response:
await page.route('https://ray.run/*', route => {
const customResponse = {
status: 200,
contentType: 'text/html',
body: 'Intercepted response',
};
route.fulfill(customResponse);
});
In this case, any request made to URLs starting with "https://ray.run/" will receive a custom response with status code 200, content type 'text/html', and body containing 'Intercepted response'.
Remember, when defining routes using page.route()
, they take precedence over routes defined at browser context level using browserContext.route()
. If there are conflicting routes for a specific request URL, the one defined at page level will be used.
Rayrun is a community for QA engineers. I am constantly looking for new ways to add value to people learning Playwright and other browser automation frameworks. If you have feedback, email [email protected].