gpt4 book ai didi

javascript - 如何从javascript链接获取下载位置?

转载 作者:行者123 更新时间:2023-11-29 21:39:17 25 4
gpt4 key购买 nike

我正在尝试以编程方式从 a website 下载 pdf其中链接加载了一些 javascript:

<a href="javascript:__doPostBack('downloadTop','')">Download</a>

看到 wget 或任何类似的机制显然会失败,我决定将 selenium 与 Phantomjs 结合使用来模拟真实的浏览器和 javascript 解释器,以便在我“单击”下载链接时实际查看它的作用。根据this github issue Phantomjs 目前不支持文件下载。问题是我什至不需要使用 Phantomjs 下载文件,我只想从文件中获取直接 URL,这样我就可以使用 wget 之类的工具简单地下载它。

所以我尝试了以下方法:

>>> from selenium import webdriver
>>> driver = webdriver.PhantomJS()
>>> link = 'https://www.yourticketprovider.nl/LiveContent/tickets.aspx?x=492449&y=8687&px=92AD8EAA22C9223FBCA3102EE0AE2899510C03E398A8A08A222AFDACEBFF8BA95D656F01FB04A1437669EC46E93AB5776A33951830BBA97DD94DB1729BF42D76&rand=a17cafc7-26fe-42d9-a61a-894b43a28046&utm_source=PurchaseSuccess&utm_medium=Email&utm_campaign=SystemMails'
>>> driver.get(link)
>>> for linkElement in driver.find_elements_by_tag_name('a'):
... print linkElement.get_attribute('href')
...
https://www.yourticketprovider.nl/
javascript:__doPostBack('downloadTop','')
https://www.yourticketprovider.nl/LiveContent/tickets.aspx?x=492449&y=8687&px=92AD8EAA22C9223FBCA3102EE0AE2899510C03E398A8A08A222AFDACEBFF8BA95D656F01FB04A1437669EC46E93AB5776A33951830BBA97DD94DB1729BF42D76&rand=a17cafc7-26fe-42d9-a61a-894b43a28046&utm_source=PurchaseSuccess&utm_medium=Email&utm_campaign=SystemMails#
etc. etc.

因为我需要获取第二个元素,所以我尝试了以下操作:

>>> a = driver.find_elements_by_tag_name('a')[1].click()
>>> print a
None

从这里我有点卡住了。

有谁知道我怎样才能点击该链接并获得结果下载网址?欢迎所有提示!

最佳答案

tl;dr: 该链接实际上触发了隐藏表单 form#form1

解决这些问题的正确方法是忘记 javascript 并打开控制台,特别是网络面板。所以我所做的就是打开面板,我可以清楚地看到:

image description

这里的POST很重要,它的意思是使用POST HTTP请求,所以不能只用wget来获取。据我所知,Wget 只允许您定义 URL。我还可以同时检查 GET(?blah=blah)和 POST(那些在请求 header 之后)参数:

image description

我注意到 GET 参数与您共享的 URL 中的参数匹配。所以你只需要复制 POST 参数。此代码片段可以从隐藏表单中获取它们:

function paramsToObject(form) {
var fields = {};
for(var i=0,l=form.length; i<l; i++) {
fields[form[i].name] = form[i].value;
}
return fields;
}
console.log(JSON.stringify(paramsToObject(document.forms[0])));

也可以通过获取表单的target属性获取URL。

关于javascript - 如何从javascript链接获取下载位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33676252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com