使用Python在链接的href中执行JavaScript

2024-10-03 06:19:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Python在站点(http://bibliotecadigitalhispanica.bne.es)上自动下载一些PDF。在

我尝试过使用urllib/urllib2/mechanize模块(我在其他站点中使用过:这包括标准函数urlopen、urlretrieve等),但是这里的链接在它们的href属性中嵌入了JavaScript,这些属性进行了一些处理并打开了PDF,这些模块似乎无法处理这些功能,至少从我在这里读到的。例如,当我执行以下操作时:

request = mechanize.Request('the example url below')
response = mechanize.urlopen(request)

它只是返回包含HTML的页面-我只是无法提取PDF文件(该页面内也没有指向它的链接)。在

通过在真正的浏览器(使用Firefox中的LiveHTTPHeaders扩展)查看标题,我知道会发出很多HTTP请求,最终PDF被返回(并显示在浏览器中)。我想能够截获这个并下载它。具体地说,我得到了302和304个回复,最终得到了PDF。在

以下是我正在爬行的链接属性的示例: href='javascript:打开窗口交付(“http://bibliotecadigitalhispanica.bne.es:80/verylonglinktoaccess”);'

似乎如果我执行这个嵌入在href属性中的JavaScript,我最终可以访问PDF文档本身。我试过使用selenium,但它有点令人困惑-我不太确定如何在阅读其文档时使用它。有人能给我一个建议吗(通过一个我没试过的模块,或者一个我已经试过的模块),我可以这样做吗?在

非常感谢你的帮助。在

注:如果您想看看我要复制的内容,我将尝试访问下面页面中提到的PDF链接(带有PDF图标的链接):): http://bibliotecadigitalhispanica.bne.es/R/9424CFL1MDQGLGBB98QSV1HFAD2APYDME4GQKCBSLXFX154L4G-01075?func=collections-result&collection_id=1356


Tags: 模块http属性pdfes站点链接request
1条回答
网友
1楼 · 发布于 2024-10-03 06:19:18

javascript:打开窗口交付("http://bibliotecadigitalhispanica.bne.es:80/webclient/DeliveryManager?application=DIGITOOL-3&owner=resource discovery&custom_att_2=simple_viewer&forebear_coll=1333&user=GUEST&pds_handle=&pid=1673416&con_lng=SPA&rd_session=http://bibliotecadigitalhispanica.bne.es:80/R/7IUR42HNR5J19Ay3QJTL1P9M2AN81RCY4DRFE8JN5T22BI7I-03416“)

该URL指向302页。如果你遵循它,你会在一个框架页面结束,那里的底部框架是内容页面。在

http://bibliotecadigitalhispanica.bne.es///exlibris/dtl/d3_1/apache_media/L2V4bGlicmlzL2R0bC9kM18xL2FwYWNoZV9tZWRpYS8xNjczNDE2.pdf

(lib)curl可以跟随302页。在

到目前为止,Javascript还不是问题所在。然后进入single_viewer_toolbar2.jsp,函数setLabelMetadataStream在将pdf提交给其iframe“sendRequestIFrame”之前,将其组合在一起。在

我认为有三种可能性:

  1. javascript执行方法:高复杂性,需要编写大量代码,可能很脆弱
  2. 基于浏览器的东西:Selenium可能很好。我知道elinks2支持javascript,根据它的wikipedia页面,它可以用“Perl、Ruby、Lua和GNU Guile”编写脚本。在
  3. 向web管理员寻求帮助。无论如何,您都应该这样做,以了解他们对机器人的政策/态度。也许他们可以为您(和其他人)提供一个接口/API。在

我建议你多了解硒,这似乎是最简单的。在

相关问题 更多 >