【问题标题】:Save a pdf file that's been opened in Internet Explorer with OLE and Perl保存已在 Internet Explorer 中使用 OLE 和 Perl 打开的 pdf 文件
【发布时间】:2013-09-19 13:54:13
【问题描述】:

我正在寻找一种使用 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,但我一直无法弄清楚。

【问题讨论】:

  • 你有网站的控制权吗??用户将能够下载,然后他们可以按照自己的意愿打开
  • 如果这就是您的意思,我不拥有该网站。是的,用户可以手动下载文件,但我希望 Perl 来代替。

标签: perl internet-explorer ole


【解决方案1】:

您要做的是自动化 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);

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      您可以使用 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();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-27
        • 1970-01-01
        • 2017-08-21
        • 1970-01-01
        相关资源
        最近更新 更多