0

我有一些代码(顺便说一下,它用于 Omniture SiteCatalyst),它根据我在页面源代码中设置的一些 JavaScript 对象变量呈现 1x1 像素。JavaScript 最终会根据脚本代码创建一个 img,但 img src 并未硬编码到 HTML 中。给定页面的 URL,我如何弄清楚 img src 是什么?如果我只是抓取页面,我将获得预渲染的 JavaScript。

编辑

例如,假设我有StackOverflow.html的代码:

<html>
<script type="text/javascript">
a = 2
document.write(a)
</script>
</html>

如何获取StackOverflow.html并以某种方式获取值“2”而不是我的所有脚本代码?

谢谢!

4

4 回答 4

2

如果您试图a在脚本在客户端(即在浏览器中)运行之后获取值,您应该能够以正常方式检索它。

采取以下设置:

索引.html

此文件是您的网页。它包含一些内容、插入图像的跟踪脚本和您自己的脚本。

<!doctype html>
<html>
<head><title>My Page</title></head>
<body>
  <p>My Content<p>
  <!-- Start tracking code -->
  <script src="tracking.js"></script>
  <!-- End tracking code -->
  <script src="mycode.js"></script>
</body>
</html>

跟踪.js

这是跟踪代码,大概是跟踪公司提供的。

var id = '1234foobar';
var visitorUserAgent = encodeURIComponent(navigator.userAgent);
document.write(
  '<img src="http://tracking.com/1x1.gif?id='
  + id + '&ua=' + visitorUserAgent + '" />'
);

我的代码.js

如果您知道跟踪代码创建了哪些变量(如果有),您应该能够检索变量本身或至少检索跟踪代码创建的标签的src属性。img

var imgs = document.getElementsByTagName('img');
alert([id, visitorUserAgent, imgs[imgs.length - 1].src].join('\n'));
于 2009-10-23T22:05:51.797 回答
0

编辑:

回答您重述的问题:

在我看来,您的问题是弄清楚页面在 JS 运行后会是什么样子。

没有简单的方法可以为您提供 100% 准确的结果,因为您需要实际运行 javascript 并查看结果,当您不在浏览器中时,这真的很不容易。

现在你有几个选择。您没有提到您使用什么工具来抓取页面,假设您使用的是定制的刮板。如果您想继续使用刮刀,您可以:

  • 研究使用 rhino 来评估 JS。我不确定这会给你带来什么,你可以研究一下。
  • 如果 document.write 是您关心的唯一调用,您可以解析出它使用的变量,然后尝试评估它们的值。这将需要编写一个解析器,可能很困难。
  • 你能做的最好的事情是使用像碲或硒这样的功能测试工具。这将使您可以访问 JS 已经运行的页面,并且您可以使用我的原始答案来获取您需要的值。
于 2009-10-23T15:07:00.337 回答
0

我会在 firebug 上使用 Net 面板并按图像请求进行过滤。你会看到它在创建的那一刻就消失了。此外,如果您提出分析请求,请尝试安装Omnibug firebug 插件来跟踪和分解请求。

于 2011-03-03T16:43:13.853 回答
0

我认为最好的方法是使用 Selenium,然后在页面中注入一些 javascript 来挖掘 DOM,或者在适当的情况下从全局窗口中检索值。

于 2012-03-07T00:38:25.027 回答