我正在寻找一种方法来使用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
,但我无法弄明白。
答案 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();