Javascript 是否可以让提取等待重定向?
我目前正在从web扩展动态抓取网页,并使用以下代码:Javascript 是否可以让提取等待重定向?,javascript,google-chrome-extension,fetch,Javascript,Google Chrome Extension,Fetch,我目前正在从web扩展动态抓取网页,并使用以下代码: let url = "https://lykdat.com/search-result/?image_url=https://anf.scene7.com/is/image/anf/KIC_330-2455-0904-476_prod1?$product-hol-v1$&wid=800&hei=1000"; fetch(url,{redirect: 'follow'}).then(r => r.text()).then
let url = "https://lykdat.com/search-result/?image_url=https://anf.scene7.com/is/image/anf/KIC_330-2455-0904-476_prod1?$product-hol-v1$&wid=800&hei=1000";
fetch(url,{redirect: 'follow'}).then(r => r.text()).then(result => {
console.log(result);
var el = document.createElement( 'html' );
el.innerHTML = result;
// console.log(typeof(tempPage));
console.log(el);
tempImgs = el.getElementsByTagName('img');
console.log(tempImgs);
})
我希望能够更改“image\u url=”之后的任何文本,以便更改插入网站的图像。不幸的是,我试图从中提取信息的页面是在短暂的加载期之后出现的,因此使用“fetch”功能只能从加载屏幕中提取信息,而不是我想要的实际页面。重定向不是即时的,可能需要3-30秒,我想知道是否有办法在抓取数据之前强制fetch等待重定向。非常感谢您提供的任何帮助 使用
wait
,你需要你的函数是一个异步函数才能工作
async function YourFunctionName (){
let url = "https://lykdat.com/search-result/?image_url=https://anf.scene7.com/is/image/anf/KIC_330-2455-0904-476_prod1?$product-hol-v1$&wid=800&hei=1000";
var promise = await fetch(url,{redirect: 'follow'}).then(r => r.text()).then(result => {
console.log(result);
var el = document.createElement( 'html' );
el.innerHTML = result;
// console.log(typeof(tempPage));
console.log(el);
tempImgs = el.getElementsByTagName('img');
console.log(tempImgs);
})
}
YourFunctionName();
虽然我自己不知道JavaScript,但我会使用PHP的。查看loadHTMLFile,比如
$dom=newDOMDocument$dom->loadHTMLFile($urlHere)$imgs=$dom->getElementsByTagName('img');foreach($imgs as$img){$src=$img->getAttribute('src');/*$src是循环中每个图像的src属性*/}
。页面正在使用脚本重定向到最终结果,因此无论您等待多长时间,它们都不会出现在初始HTML响应中-这是因为fetch
不运行脚本。您需要将该站点嵌入iframe中,声明一个包含“all_frames”:true
和匹配URL模式的内容脚本,以便它在该iframe中运行,然后通过消息传递()将结果传递回来。由于某些原因,此解决方案对于我请求的特定网页仍然不起作用。我相信这是因为页面可以完全加载,这满足等待函数的条件,但工作仍在云计算机上进行。我相信这就是为什么加载页面仍使用此代码的原因。您是否知道如何强制代码等待重定向,或者代码是否因其他原因出现故障?谢谢你的帮助!原始代码已经正确地使用了Promise API,所以这个答案完全不正确。