Extracting the source code of a facebook page with

2020-06-30 03:54发布

问题:

If I write code in the JavaScript console of Chrome, I can retrieve the whole HTML source code by entering:

  var a = document.body.InnerHTML; alert(a); 

For fb_dtsg on Facebook, I can easily extract it by writing:

  var fb_dtsg = document.getElementsByName('fb_dtsg')[0].value;

Now, I am trying to extract the code "h=AfJSxEzzdTSrz-pS" from the Facebook Page. The h value is especially useful for Facebook reporting.

How can I get the h value for reporting? I don't know what the h value is; the h value is totally different when you communicate with different users. Without that h correct value, you can not report. Actually, the h value is AfXXXXXXXXXXX (11 character values after 'Af'), that is what I know.

Do you have any ideas for getting the value or any function to generate on Facebook page.

The Facebook Source snippet is below, you can view source on facebook profile, and search h=Af, you will get the value:

  <code class="hidden_elem" id="ukftg4w44">
<!-- <div class="mtm mlm">
  ...
   ....
  <span class="itemLabel fsm">Unfriend...</span></a></li>
  <li class="uiMenuItem" data-label="Report/Block...">
  <a class="itemAnchor" role="menuitem" tabindex="-1" href="/ajax/report/social.php?content_type=0&amp;cid=1352686914&amp;rid=1352686914&amp;ref=http%3A%2F%2Fwww.facebook.com%2      F%3Fq&amp;h=AfjSxEzzdTSrz-pS&amp;from_gear=timeline" rel="dialog">
  <span class="itemLabel fsm">Report/Block...</span></a></li></ul></div>

  ...
   ....
  </div> -->
  </code>

Please guide me. How can extract the value exactly?

I tried with following code, but the comment block prevent me to extract the code. How can extract the value which is inside comment block?

 var a = document.getElementsByClassName('hidden_elem')[3].innerHTML;alert(a);

回答1:

Here's my first attempt, assuming you aren't afraid of a little jQuery:

// http://stackoverflow.com/a/5158301/74757
function getParameterByName(name, path) {
    var match = RegExp('[?&]' + name + '=([^&]*)').exec(path);
    return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
}

var html = $('.hidden_elem')[0].innerHTML.replace('<!--', '').replace('-->', '');
var href = $(html).find('.itemAnchor').attr('href');
var fbId = getParameterByName('h', href); // fbId = AfjSxEzzdTSrz-pS

Working Demo

EDIT: A way without jQuery:

// http://stackoverflow.com/a/5158301/74757
function getParameterByName(name, path) {
    var match = RegExp('[?&]' + name + '=([^&]*)').exec(path);
    return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
}

var hiddenElHtml = document.getElementsByClassName('hidden_elem')[0]
    .innerHTML.replace('<!--', '').replace('-->', '');

var divObj = document.createElement('div');
divObj.innerHTML = hiddenElHtml;

var itemAnchor = divObj.getElementsByClassName('itemAnchor')[0];
var href = itemAnchor.getAttribute('href');

var fbId = getParameterByName('h', href);

Working Demo

I'd really like to offer a different solution for "uncommenting" the HTML, but I stink at regex :)