2017-08-29 2 views
1

Ich versuche, ein paar Informationen von Website zu kratzen http://www.example.com, die die folgende html hat:JSDOM: Zugang divs innerhalb iframe

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>My site</title> 
</head> 
<body> 
<div id="one"> 
    <div> 
     <iframe> 
      <!DOCTYPE html> 
      <html> 
      <head> 
      <meta charset="utf-8"> 
      <title>My site</title> 
      </head> 
      <body> 
      <div id="hello"> 
       <a href="http://example.net/somepage"><img src="http://example.net/dokuro_chan.jpg"></a> 
      </div> 
      </body> 
      </html> 
     </iframe> 
    </div> 
</div> 
<div id="two"> 
    <div> 
     <iframe> 
      <!DOCTYPE html> 
      <html> 
      <head> 
      <meta charset="utf-8"> 
      <title>My site</title> 
      </head> 
      <body> 
      <div id="hello"> 
       <a href="http://example.net/somepage2"><img src="http://example.net/dokuro_chan2.jpg"></a> 
      </div> 
      </body> 
      </html> 
     </iframe> 
    </div> 
</div> 
</body> 
</html> 

Dann versuche ich den Iframe-Inhalte über NodeJS mit jsdom zu kratzen:

const jsdom = require("jsdom"); 
const { JSDOM } = jsdom; 

JSDOM.fromURL("http://www.example.com",{ 
     resources: "usable", 
     runScripts: "dangerously" 
}).then(dom =>{ 

     const divIds=["#one","#two"] 

     divIds.forEach((divId)=> { 
      const selector=googleAdSelector(divId) 
      const iframe=dom.window.document.querySelector(selector) 
      console.log("Iframe Object", iframe) 
     }) 
     // callback(null,dom) 
}) 

const googleAdSelector=function(divId){ 
     return divId+" > div > iframe"; 
} 

Was ich versuchen möchte zu erreichen, ist die href und die src Inhalte, die in den Iframes ist.

Aber aus irgendeinem Grund ist die Ausgabe:

Iframe null Objekt

Iframe Objekt null

Haben Sie eine Ahnung, heiß wie INSIDE den HTML-Zugriff die iframe?

Antwort

0

Sie müssen es anders angehen. Verwenden Sie einfach einen kopflosen Browser, um die Daten während des Ladens der Seite manuell über das Netzwerk abzurufen und separat zu verarbeiten.