1

如果我在 Chrome 的 JavaScript 控制台中编写代码,我可以通过输入以下内容来检索整个 HTML 源代码:

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

对于 Facebook 上的 fb_dtsg,我可以通过以下方式轻松提取它:

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

现在,我正在尝试从 Facebook 页面中提取代码“h=AfJSxEzzdTSrz-pS”。h 值对于 Facebook 报告特别有用。

如何获得报告的 h 值?我不知道 h 值是多少;当你与不同的用户交流时,h 值是完全不同的。没有那个 h 正确的值,你不能报告。实际上,h 值是 AfXXXXXXXXXXX('Af' 之后的 11 个字符值),这就是我所知道的。

你有什么想法来获得在 Facebook 页面上生成的价值或任何功能。

Facebook 源代码片段如下,您可以在 facebook 个人资料中查看源代码,然后搜索 h=Af,您将获得值:

  <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>

请指导我。如何准确提取值?

我尝试使用以下代码,但注释块阻止我提取代码。如何提取注释块内的值?

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

1 回答 1

2

这是我的第一次尝试,假设你不害怕一点 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

工作演示

编辑:没有 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);

工作演示

我真的很想为“取消注释” HTML 提供一个不同的解决方案,但我对正则表达式很讨厌 :)

于 2012-11-20T22:57:00.410 回答