5

我正在寻找一种使用 Perl 在 Internet Explorer 中打开 PDF 文件然后保存的方法。

(我希望用户能够与脚本交互并决定是否发生下载,这就是为什么我希望 pdf 显示在 IE 中,所以我不能使用类似的东西LWP::Simple。)

例如,这段代码加载(显示)一个 pdf,但我不知道如何让 Perl 告诉 IE 保存文件。

use Win32::OLE;
my $ie = Win32::OLE->new("InternetExplorer.Application");
$ie->{Visible} = 1;
Win32::OLE->WithEvents($ie);

$ie->Navigate('http://www.aeaweb.org/Annual_Meeting/pdfs/2014_Registration.pdf');

我想我可能需要使用 OLE 方法execWB,但我无法弄清楚。

4

3 回答 3

5

您要做的是自动化 Internet Explorer UI。有很多图书馆可以做到这一点。您告诉库找到您感兴趣的窗口,然后您可以将击键或命令发送到窗口(在您的情况下为 CTRL-S)。

关于如何在 Perl 中执行此操作的一个很好的概述位于此处

示例语法:

my @keys = ( "%{F}", "{RIGHT}", "E", );
for my $key (@keys) {
    SendKeys( $key, $pause_between_keypress );
}

代码以包含按键的数组开头。注意前三个元素的格式。按键是:Alt+F、向右箭头和 E。打开应用程序后,它会导航菜单以打开编辑器。

另一种选择是使用 LWP:

use LWP::Simple;

my $url = 'http://www.aeaweb.org/Annual_Meeting/pdfs/2014_Registration.pdf';
my $file = '2014_Registration.pdf';

getstore($url, $file);
于 2013-09-25T20:03:26.947 回答
0

您可以使用 Selenium 和 perl 远程驱动程序来管理 IE

http://search.cpan.org/~aivaturi/Selenium-Remote-Driver-0.15/lib/Selenium/Remote/Driver.pm http://docs.seleniumhq.org/projects/webdriver/

您还需要下载 IE selenium 驱动程序 - 它标配 Firefox https://code.google.com/p/selenium/wiki/InternetExplorerDriver

use Selenium::Remote::Driver;

my $driver = new Selenium::Remote::Driver;
$driver->get('http://www.google.com');
print $driver->get_title();
$driver->quit();
于 2013-09-27T22:10:40.630 回答
0

ForExecWB 这里是一个很好的线程,但是没有解决:http ://www.perlmonks.org/?node_id=477361

$IE->ExecWB($OLECMDID_SAVEAS, $OLECMDEXECOPT_DONTPROMPTUSER, 
$Target);

为什么不在 IE 中显示 PDF 然后关闭 IE 并使用 LWP 保存文件?

于 2013-09-26T13:36:13.423 回答