保存使用OLE和Perl在Internet Explorer中打开的pdf文件

时间:2013-09-19 13:54:13

标签: perl internet-explorer ole

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

(我希望用户能够与脚本交互并决定是否发生下载,这就是我想在IE中显示pdf的原因,所以我不能使用像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,但我无法弄明白。

3 个答案:

答案 0 :(得分:5)

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

有关如何在Perl中执行此操作的详细概述位于here

语法示例:

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);

答案 1 :(得分:0)

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

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

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

答案 2 :(得分: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();