webForumDet fria alternativet

Lista över bilder på en sida

7 svar · 1 232 visningar · startad av Mattias Nordin

Mattias NordinMedlem sedan dec. 20051 056 inlägg
#1

Finns det något sätt att med hjälp av javascript få ut en lista (src) på alla bildobjekt på en sida?

Antar att man kan köra regexp för att hitta alla imagetaggar men det kanske finns en annan metod???

:stud

voigtann1Medlem sedan juni 20019 519 inlägg
#2
var images = document.getElementsByTagName("img");
for(var i=0,l=images.length;i<l;i++) {
var image = images[i];
// Get src with image.src and do whatever you want
}
Mattias NordinMedlem sedan dec. 20051 056 inlägg
#3

Det jag experimenterar med är om det är möjligt att hämta någon annans sida genom att skicka in en url och sedan presentera enbart bilderna på den sidan på ett intressant sätt. Ungefär som google gör med sin bildsökning.

Dilemmat är ju således att jag inte har tillgång till källkoden på sidan och kan därmed inte namnge bilderna på ett speciellt sätt.

hmmm...

(coolt. detta var inlägg 1000 med min nya profil)

voigtann1Medlem sedan juni 20019 519 inlägg
#4

Vad menar du med att namnge bilderna på ett speciellt sätt? Javascript kommer bara åt vad som finns på den aktuella sidan, hämta ut alla IMG element och loopar ut dom, om du hämtar bilder från en annan sida (screen scraping) så få du fortfararande ut DOM objekt som du kan hämta.

Mattias NordinMedlem sedan dec. 20051 056 inlägg
#5

My bad, läste lite slarvigt. Mycket intressant och jag har delvis fått det att fungera.

<div id="divReadyStateOutput" style="border:2px solid green;"> </div>
<div id="divPictureOutputArea" style="border:2px solid yellow;"> </div>

<script>
function funGetXmlHttpObject(getThisPage, myOutputDivId) { 

	var objXmlHttp = null
	
	try{
		objXmlHttp = new XMLHttpRequest();
	}catch(e){
			try{
				objXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			}catch(e){
				try{
				objXmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
				}catch(e){
					alert("error opening XMLHTTP")
				}            
			}        
		}        
	
	//alert("Open page")
	objXmlHttp.open("GET", getThisPage, true)    
	objXmlHttp.send();

	// Display readystate
	//alert("Readystate = " +objXmlHttp.readyState)	
	objXmlHttp.onreadystatechange=function(){
	document.getElementById("divReadyStateOutput").innerHTML = objXmlHttp.readyState;
  		if (objXmlHttp.readyState==4 && objXmlHttp.status==200){
    	}
  	} 

	//Output the page in div...
	//document.getElementById(myOutputDivId).innerHTML = objXmlHttp.responseText	

	// Lets find the images...
	//alert("Find images")
	var varHtml = "";
	var varPageString = objXmlHttp.responseText;
	var arrImages = document.getElementsByTagName("img");

	//alert("Found images = " +arrImages.length);
	for (i=0; i<arrImages.length; i++){
  	
		varHtml = varHtml + arrImages[i].src +"<br/>"
  
  	}
	
	// Display image src in output div...
	document.getElementById(myOutputDivId).innerHTML = varHtml;

} 
</script>
<script>
//sida A fungerar
funGetXmlHttpObject("http://filmsnutt.se/", "divPictureOutputArea")

//sida B fungerar EJ
funGetXmlHttpObject("http://mattiasnordin.net/", "divPictureOutputArea")
</script>

Jag får Access denied fel. Vad kan det bero på?

voigtann1Medlem sedan juni 20019 519 inlägg
#6

AJAX fungera endast på din egna domän.

Mattias NordinMedlem sedan dec. 20051 056 inlägg
#7

Det var ju en bummer.

Men jag såg att det finns ServerXMLHTTP också. Får min webserver hämta en sida från internet och går det sedan att applicera javascriptet på denna?

Typ:

<% call subGetPage("http://mattiasnordin.net") %>

<% sub subGetPage(strDocURL)

	Set objXmlHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP") 

	'Get the image
	objXmlHTTP.Open "GET", strDocURL, False
	objXmlHTTP.Send ()

	Response.Write(objXmlHTTP.responseText) %>

	<div id="divReadyStateOutput" style="border:2px solid green;"> </div>
	<div id="divPictureOutputArea" style="border:2px solid yellow;"> </div>

<script>
	// Lets find the images...
	//alert("Find images")
	var varHtml = "";
	var arrImages = document.getElementsByTagName("img");

	alert("Found images = " +arrImages.length);
	for (i=0; i<arrImages.length; i++){
  	
		varHtml = varHtml + arrImages[i].src +"<br/>"
  
  	}
	
	// Display image src in output div...
	document.getElementById("divPictureOutputArea").innerHTML = varHtml;

} 
</script>

?

voigtann1Medlem sedan juni 20019 519 inlägg
#8

Ja, därav "ScreenScraping", bör bara vara att köra, dock så bli HTML strukturen fel om du har anropat fler än en sida och få flera <html>-element, doctypes osv.

246 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
120 ms — hämta statistik (db)
124 ms — hämta tråd, inlägg och bilagor (db)