【问题标题】:Loading IE Cookies into Perl's WWW::Mechanize将 IE Cookie 加载到 Perl 的 WWW::Mechanize
【发布时间】:2012-07-26 17:26:40
【问题描述】:

我玩得很开心......

我正在尝试连接到需要登录的网站。我显然可以不登录直接进入该页面,因为 IE 有一个 cookie 可以这样做。

我正在编写一个将由我以外的人运行的脚本,因此我不想发送包含我的登录信息的文件。理想情况下,其他人也不必输入这些信息。

这是代码中相关的小部分。我只想从 IE 加载 cookie 并打印它们(因为我假设一旦它们在那里,它们就会被正确访问)。

我已经搜索了几个小时,甚至读到有人声称这会加载 cookie。我看到它现在能够存储 cookie,但不能在我的计算机上加载现有的 cookie。

#!/usr/bin/perl -w
use strict;
use WWW::Mechanize;
use HTTP::Cookies::Microsoft;
use Win32::TieRegistry(Delimiter => "/");

my $cookies_dir = $Registry-> {"CUser/Software/Microsoft/Windows/CurrentVersion/Explorer/Shell Folders/Cookies"};
my $cookie_jar = HTTP::Cookies::Microsoft->new(file => "$cookies_dir\\index.dat",'delayload'=>0,);
my $mech = WWW::Mechanize->new(cookie_jar => $cookie_jar);
print "Set Cookie Jar?\n", $cookie_jar->as_string, "\n";
print "Set Cookie Jar?\n", $mech->cookie_jar->as_string, "\n";

我可以加载现有的 cookie 吗?

HTTP::Cookies::Microsoft 不兼容 IE9 吗? (网站列出了 IE6 和 IE7,但自 2002 年以来未更新)。

我什至看不到这个示例或任何示例中实际加载现有 cookie 的位置。如果只是兼容性问题,IE9有哪些选择? (我必须坚持IE9,因为它是这家公司的支持浏览器)

谢谢!

【问题讨论】:

  • 您使用的是哪个版本的HTTP::Cookies::Microsoft?我发现 6.00/6.01 列出了 IE 5 和 6,但最后一次更新是在 2011 年。
  • 那将是一个很好的问题。我显然正在使用 6.00。我使用 CPAN 安装。
  • 我查看了我的 win7 cookie 目录,那里没有 index.dat 文件。只有一堆文本文件似乎每个都包含一个或多个 cookie。我几乎从不使用 IE,所以这可能是问题所在。不过,该模块的代码看起来只读取该 .dat 文件。
  • 我承认我把index.dat放在那里是因为我在几个例子中看到了它。我也没有index.dat,事实上也没有.dat 文件。该行是我想知道当它引用一个不存在的文件时它如何加载 cookie 的原因之一。此外,引用随机生成的名称似乎也不是一个好主意。
  • 我会尝试了解新的 IE 如何保存这些 cookie,并可能在 HTTP::Cookies 上自己构建一些东西。您是否尝试仅使用带有 cookies 目录且没有文件名的 HTTP::Cookies::Microsoft 模块?也许它会自己找出饼干?

标签: perl cookies login internet-explorer-9


【解决方案1】:

在我的 Windows XP 系统上使用 IE8,cookie 位于C:\Documents and Settings\userid\Local Settings\Temporary Internet Files。没有index.dat,cookies在自己的文件里。

我不知道where IE9 stores cookies

但是,如果您尝试在用户通过 IE 登录的站点上自动执行某些操作并启动您的程序,您可以使用Win32::IE::Mechanize 或通过Win32::OLE 驱动 IE。例如,请参阅我的博客文章 Using Win32::OLE with events to capture Internet Explorer screenshots with Perl 。有关可用方法、属性和事件的信息,请参阅InternetExplorer object documentation

【讨论】:

  • 您好。我不知道为什么,但是Win32::OLE 在线程和事件方面给我带来了很多麻烦。我开始尝试Win32::IEAutomation,但它似乎无法加载代理-> 文档并且一遍又一遍地失败。 Win32::IE::Mechanize 在大约一半的测试用例中失败并且不会安装。在其他人身上花了这么多时间之后,我目前正在给Win32::IE::Mechanize 另一个安装机会。 (另外,index.dat 文件被隐藏了,我必须选择显示系统文件才能看到它。它可能在那里,你可能只是没有显示系统文件。)
  • 我不建议在 Perl 线程中使用 Win32::OLE。一罐蠕虫对我来说太多了。通过Win32::OLE 控制 IE 一直对我有用。但是,您确实必须学习 MSDN 文档。
猜你喜欢
  • 2011-10-25
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-26
  • 2011-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多