Изменение всех <img src>
тегов на активной странице
Чтобы изменить все теги img в документе, вам нужно будет запустить page.evaluate()
ииспользуйте document.querySelectorAll()
там, в браузере.Вот быстрый рабочий фрагмент, который удаляет домен из каждого источника изображения в документе:
(async () => {
const browser = await puppeteer.launch();
const url = '/11435300/kak-zagruzit-html-css-i-img-s-pomoschy-puppeteer-i-jsdom';
const page = await browser.newPage();
await page.goto(url, {waitUntil: 'load'});
await page.evaluate(() => {
var imgs = document.querySelectorAll('img');
imgs.forEach(function(img){
let imageSrc = img.getAttribute("src");
img.setAttribute("src", imageSrc.replace(/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n?]+)/img, ""));
console.log(img.getAttribute("src"));
});
});
})();
Изменение URL-адреса для каждого ресурса, который является изображением
Это немного сложнее.Короче говоря, вам нужно перехватить каждый запрос, сделанный браузером, и continue()
его с измененным URL.
Опять рабочий фрагмент, который заменяет каждый URL ресурса изображения доменомпо нашему выбору:
var newDomain = "https://example.com";
(async () => {
const browser = await puppeteer.launch({headless: false});
const url = '/11435300/kak-zagruzit-html-css-i-img-s-pomoschy-puppeteer-i-jsdom';
const page = await browser.newPage();
await page.setRequestInterception(true);
page.on('request', (interceptedRequest) => {
// Continue if request URL is page URL
if (interceptedRequest.url() == page.url()) {
interceptedRequest.continue();
return;
}
// Intercept if request resource is an Image
if (interceptedRequest.resourceType() == "image") {
// Replace target domain with the new domain we want
let newUrl = interceptedRequest.url().replace(/^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n?]+)/img, newDomain);
console.log(newUrl);
interceptedRequest.continue({
url: newUrl,
});
return;
}
// Continue any other requests
interceptedRequest.continue();
})
await page.goto(url, {waitUntil: 'load'});
})();