我正在抓取一个广泛使用框架的网站。在每一帧中都有一段 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#,那么无论窗口名称是什么,我都可以通过检查。那可能吗?我认为服务器定义了窗口名称。
堆栈的任何帮助将不胜感激。这让我发疯了。