javascript - 如何解析返回 javascript 的小部件来构建 DOM 而不是 HTML?

标签 javascript bash widget

我们提供了一个小部件,可以打印 NPR 提供的歌曲播放列表。我们需要每隔几秒以编程方式获取当前播放的歌曲(列表顶部的歌曲),然后将其保存到文件或其他内容中。容易吧? wget http://composer.nprstations.org/asasfasdfasf | sed 'find/it' > nowplaying.txt或类似的东西。可以是 python、bash、pascal,等等。

然而......经过进一步检查,小部件并不简单地返回 HTML,它返回一堆 JavaScript,然后构建 DOM。因此,构建播放列表的是客户端逻辑,而不是服务器端,或者两者都有。页面加载后,我可以轻松获取所需的文本,输入类似 $('.now-playing a').html()[0] 的内容。在控制台中可以解决这个问题,但我不知道如何以编程方式做到这一点。

所以我们需要一个带有 javascript 引擎的浏览器来首先处理页面,然后才能解析它。您建议我们做什么?

感谢您的帮助!!

这是小部件服务器的完整响应:

<head>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
  <script src="/widgets/src/whatson.js"></script>
  <script src="/widgets/src/jquery-deparam.js"></script>
  <script>
    var configuration = {
      schedule: 'now'
    };
    if ( window.location.search ) configuration = $.extend({}, configuration, $.deparam( (window.location.search).replace('?','') ));
    $(function(){ 
      $('.now-playing').whatsOn( configuration ); 
    }); 
   </script>
</head>
<body>
  <div class="now-playing"></div>
</body>
</html>

最佳答案

从您发布的内容来看,该页面运行 whatsOn JS 函数。

正如您所说,在通信网络中,它使用您的站 ID 连接到 API。

因此,下一步是模拟相同的 - 您可以尝试使用 wget 或某种脚本语言连接到具有与 JS 相同的“station ID”的相同 API,并进行分析你得到了什么。

如果需要,请在下一步中重复相同的操作。

没有访问权限就不可能解决问题...

或者,您可以检查 WWW::Mechanize::Firefox Perl 模块。这里有一些examples和一个 cookbook ;)

关于javascript - 如何解析返回 javascript 的小部件来构建 DOM 而不是 HTML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25272504/

相关文章:

javascript - Spring MVC - Tiles、JSP 页面包含 js/jquery 文件不起作用

python - 使用 tkinter Text 小部件显示结果

c++ - 使用 QStyledItemDelegate 时 QPushButton 的绘制方法面临问题

javascript - 如何在另一个razor页面中访问一个razor页面的JS变量?

javascript - AJAX 调用 - 如果用户在调用完成之前离开页面会怎样?

javascript - 判断浏览器是否支持windows集成认证

bash - 解析变更日志并提取版本的变更

linux - 如何让我的 BASH 脚本知道保存的路径

linux - 脚本的输出不是预期的

c++ - QUiLoader 只创建自定义小部件的基类