0

我正在抓取一个广泛使用框架的网站。在每一帧中都有一段 javascript,如下所示:

function CheckUniqName(uniq) {
if (top.name != uniq) {
top.window.location.assign("<a webpage I don't want to redirect to>");
return false;
}
return true;
}
CheckUniqName("#unique_string#")

如果我使用 $mech->follow_link(name=>'FrameName') 打开其中一个框架,那么我会立即重定向到“我不想重定向到的网页”。关闭 JavaScript 会阻止重定向(显然),但我需要 JavaScript “打开”才能完成页面上的某些操作。

我对如何使这项工作有一些想法,但我不知道如何实现它们:

(1) 展开框架而不是跟随它们作为链接。如果我展开框架但保留在较大的框架集中,则 top.name 将等于 uniq 并且不会重定向(因为最顶层窗口的名称是“#unique_string#”)。怎么能做到这一点?我不明白 $mech->expand_frames 是如何工作的。

(2) 禁用这几行JS。是否可以在 Mechanize 中强制程序忽略某些内容行?如果 Mechanize 将忽略行“top.window.location.assign("");" 那么它不会重定向。那有可能吗?

(3) 改变变量top.name 的值。如果我可以将 top.name 重新分配为等于#unique_string#,那么无论窗口名称是什么,我都可以通过检查。那可能吗?我认为服务器定义了窗口名称。

堆栈的任何帮助将不胜感激。这让我发疯了。

4

1 回答 1

0

也许您可以使用greasemonkey 插件在页面加载之前从页面中删除这段JS?

问候,

于 2012-12-20T08:38:58.587 回答