在 Internet Explorer 中将浏览器变量附加到 PDF 文件

Attaching Browser Variable To PDF File In Internet Explorer

我正在 Windows 7 机器 运行 Internet Explorer 11 上使用 WatiN 编写网络抓取程序。我的 PDF 查看器是 Foxit Reader,它目前正在内部运行Internet Explorer。

我的目标:我正在尝试找到一种方法来单击 link,它会加载一个显示 .pdf 文件的弹出窗口 window;但是,Watin 中用于识别弹出窗口 window 的常规方法似乎不起作用。换句话说,Watin 找不到弹出窗口 window ...我不知道该怎么办。

首先,我在目标网页中单击以下 link:

<a onclick="window.open('http://go.website.com/DocumentLoader.aspx?file=3%2f111978%2fatt%2f142245916_OPT.pdf','attachment','width=960px,height=640px,resizable=no')" href="javascript:void(0)">0017384611</a>

我可以使用以下 WatiN 代码点击此 link:

browser.Link(lnk => lnk.GetAttributeValue("onclick") != null && lnk.GetAttributeValue("onclick").Contains("_OPT.pdf")).ClickNoWait();

这部分工作并生成一个新的 Internet Explorer window,它打开时显示一个 .pdf 文件。

然后我尝试使用以下代码片段为 window 创建一个新的浏览器对象:

IE popup = IE.AttachTo<IE>(Find.ByUrl(url => url != null && url.Contains("DocumentLoader.aspx")));

但是,这无法识别 window,尽管新的弹出窗口 window 有一个 URL,其中包含文件名 "DocumentLoader.aspx"(请参阅原始 link为此)。

奇怪的是,当我查询 InternetExplorer 对象以获取其所有 windows 时,带有 .pdf 文件的对象根本没有出现。我不知道这是为什么,尽管我怀疑这与 window 显示的是 .pdf 文件而不是正常的 HTML 文件有关。

我也试过用 DocumentLoader.aspx URL 打开一个新的浏览器对象,但 WatiN 似乎无法做到这一点(它一直超时)。

谁能建议我如何让 WatiN 识别新的弹出窗口 window?

谢谢!

更新:弹出窗口window出现后,我使用以下代码测试Watin是否检测到新的window:

var instances = new IECollection(true);
Console.WriteLine("Instances = " + instances.Count);

它显示计数为 1,但如下图所示,有两个 Internet Explorer windows 打开:

我可以提供不同的方法。我正在做你正在做的同样的事情,但最后我在 WatIn 中陷入了太多,我看不出解决方案比其他任何事情都简单得多。如果你确实有 link 到文件,你可以直接下载 PDF 并完全绕过预览(如果没有用户交互,这一步是无用的,如果有用户在看屏幕,你可以做你想做的一直在做,显示 PDF 并执行此处列出的操作:

using (WebClient client = new WebClient())
{
   if (Directory.Exists(@"\folder"))
   {
       string downloadURL = "http://example.com/retrievePDF.jsp?id=XXXXX";
       client.DownloadFile(downloadURL, @"\folder\" + fName + ".pdf");
   }
}

在您的特定情况下,您将从 href link(您已经拥有)

获取 dwonloadURL

希望它能对您或您发布后的其他人有所帮助。