我正在尝试编写一个可以导航和下载PDF的casperJS程序。如果我可以获取与PDF相对应的实际URL,那么它非常简单,但情况并非总是如此。为了测试这个,我一直在本地使用这个简单的例子:
<html>
<head>
</head>
<body>
<h1 class="page-title">Hello</h1>
<a id='1' href="test.pdf" target="_blank">one</a>
</body>
</html>
基本的casper:
casper.start('file:///opt/templates/templates/src/main/resources/casperjs/example.html').then(function() {
this.echo('started')
});
casper.then(function() {
this.waitForSelector('a', function() {
this.click('a');
});
});
casper.wait(1000, function() {
this.echo(JSON.stringify(this.popups[0]));
});
casper.run();
当我运行它时,(唯一)弹出窗口是一个永不加载的空白HTML页面。值得注意的是,如果您在没有'target =“_ blank”'的情况下进行测试(即PDF在同一个标签页中打开),则会发出'resource.received'事件(使用null内容类型),但加载资源会失败:
[warning] [phantom] Loading resource failed with status=fail: file:///opt/templates/templates/src/main/resources/casperjs/test.pdf
有没有什么好方法可以处理以某种通用方式打开/下载PDF的链接?你可以挂钩'navigation.requested'并在那里下载,但我认为没有一种很好的方法来确定导航是用于PDF(URL可能并不总是有文件扩展名)。