2016-06-02 8 views
1

Ich verwende das Knotenanforderungsmodul zum Lesen von Websiteinhalt. Ich bin nicht immer den vollen Körpergehalt von linkedin.com wenn ich Knoten auf Linux verwenden, aber es funktioniert gut unter Windows & Mac OS X.Inhalt von LinkedIn kann unter Linux nicht gelesen werden, wenn Knotenanforderungsmodul verwendet wird

ich den folgenden Code geschrieben haben:

var request = require('request') 
request('https://www.linkedin.com/pulse/social-media-why-its-essential-tool-oliver-bussmann', function (error, response, body) { 
    if (!error && response.statusCode == 200) { 
     console.log(body) 
    } else { 
     // always return this response 
     console.log(response.statusCode,body) 
    }); 

Ich bin immer einen 999 Statuscode und den folgenden HTML-Inhalt:

\ n \ nwindow.onload = function() {\ n // den Tracking-Code von Cookies Parst \ n var trk = "sentinel_org_block"; \ n. var cookies = document.cookie.split (";"); \ n für (var i = 0; i < kochen ies.length; ++ i) {\ n if ((cookies [i] .indexOf ("trkCode =") == 0) & & (cookies [i] .länge> 8)) {\ n trk = cookies [i] .substring (8); \ n} \ n} \ n \ n // Ermitteln Sie das Protokoll für die Weiterleitungs-URL. \ N var protocol = "http:"; \ n if (window.location.protocol == "https:") {\ n protocol = "https:"; \ n} else {\ n // Wenn "sl" cookie gesetzt ist, umleiten zu https. \ n für (var i = 0; i < cookies.length; ++ i) {\ n if ((cookies [i] .indexOf ("sl =") == 0) & & (cookies [i] .länge> 3)) {\ n window.location.href = "https:" + window .location.hrefstring (window.location.protocol.length); \ n return; \ n} \ n} \ n} \ n \ n // Holen Sie sich die neue Domain. Für Touch.www.linkedin.com oder tablet.www.linkedin.com \ n // wir strippen "Touch". und "Tablette". Für internationale Domains wie \ n // fr.linkedin.com konvertieren wir sie in www.linkedin.com \ n var domain = location.host; \ n if (domainstr (0, 6) == "touch. ") {\ n domain = domain substr (6); \ n} sonst wenn (domainstr (0, 7) ==" tablet ".) {\ n domain = domänenstr (7); \ n} sonst if (domain.charAt (2) == ".") {\ n domain = "www" + domänensubstr (2); \ n} \ n \ n window.location.href = "https: //" + domain + "/ uas/login? trk =" + trk + "& session_redirect =" + \ n encodeURIComponent (Protokoll + "//" + Domäne + \ n window.location.href.str (window.location.href .search (window.location.host) + \ n window.location.host.length)); \ n} \ n \ n \ n

Was mache ich falsch?

+0

Was ist eine Fehlermeldung? Oder was genau ist falsch? –

+0

Ich habe keinen Inhalt bekommen nur alle Skript –

+0

Das ist überhaupt nicht hilfreich, es sei denn, Sie sagen uns, was falsch ist, können wir Ihnen nicht helfen. –

Antwort

3

Ich habe das gleiche Problem, wenn ich versuche, mit einem Node.js-Programm auf einem Mac OS X-Computer auf ein LinkedIn-Profil zuzugreifen. Hier ist der Code mit der Vertiefung, zum besseren Verständnis:

window.onload = function() { 
    // Parse the tracking code from cookies. 
    var trk = "sentinel_org_block"; 
    var cookies = document.cookie.split("; "); 
    for (var i = 0; i < cookies.length; ++i) { 
     if ((cookies[i].indexOf("trkCode=") == 0) && (cookies[i].length > 8)) { 
      trk = cookies[i].substring(8); 
     } 
    } 
    // Get the protocol for the redirect url. 
    var protocol = "http:"; 
    if (window.location.protocol == "https:") { 
     protocol = "https:"; 
    } else { 
     // If "sl" cookie is set, redirect to https. 
     for (var i = 0; i < cookies.length; ++i) { 
      if ((cookies[i].indexOf("sl=") == 0) && (cookies[i].length > 3)) { 
       window.location.href = "https:" + window.location.href.substring(window.location.protocol.length); 
        return; 
      } 
     } 
    } 
    // Get the new domain. For touch.www.linkedin.com or tablet.www.linkedin.com 
    // we strip "touch." and "tablet.". For international domains such as 
    // fr.linkedin.com, we convert it to www.linkedin.com 
    var domain = location.host; 
    if (domain.substr(0, 6) == "touch.") { 
     domain = domain.substr(6); 
    } else if (domain.substr(0, 7) == "tablet.") { 
     domain = domain.substr(7); 
    } else if (domain.charAt(2) == ".") { 
     domain = "www" + domain.substr(2); 
    } 
    window.location.href = "https://" + domain + "/uas/login?trk=" + trk + "&session_redirect=" + encodeURIComponent(protocol + "//" + domain + window.location.href.substr(window.location.href.search(window.location.host) + window.location.host.length)); 
} 

Es scheint, dass es sich um ein Skript zu blockieren Verbindungen von automatisierten Programmen gemacht ist, und leitet die Benutzer auf einer Anmeldeseite. Es sucht nach einer Variablen namens "sl", die in Ihren Cookies gespeichert ist. Wenn Sie es haben, wird die Umleitung auf die richtige Webseite vorgenommen. Wenn Sie dies nicht tun, können Sie diese Seite im Skript nicht sehen und Sie werden zur LinkedIn-Anmeldeseite weitergeleitet. So ist es das, was ich von diesem Code verstehen können, aber leider habe ich nicht in der Lage, dieses Problem zu lösen ...

Edit: konnte ich mein Problem lösen, indem PhantomJS mit auf die Seite zuzugreifen. Auf diese Weise können Sie Ihren Benutzeragenten ändern, damit LinkedIn Ihre Verbindung nicht blockiert. Hier ist der Code, den ich verwendet habe:

var phantom = require('phantom'); 
    var sitepage = null; 
    var phInstance = null; 

    phantom 
     .create() 
     .then(function(instance) { 
      phInstance = instance; 
      return instance.createPage(); 
     }) 
     .then(function(page) { 
      sitepage = page; 
      page.setting('userAgent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36'); 
      return page.open(this.url); 
     }) 
     .then(function(status) { 
      console.log(status) 
      return sitepage.property('content'); 
     }) 
     .then(function (body) { 
      console.log(body); 
      sitepage.close(); 
      phInstance.exit(); 
     }) 
     .catch(function(err) { 
      console.log(err); 
      phInstance.exit(); 
     });