自动读取由HTML页面上的JavaScript创建的超链接的内容。
自动读取由HTML页面上的JavaScript创建的超链接的内容。
我想要自动从一个作为数据库前端的网页中获取内容。该页面包含了某个地区的学校列表,每个学校名称都是一个超链接。我想要获取每个学校的所有详细信息,但这些信息只能通过一个JavaScript脚本来获取,该脚本会打开一个包含必要信息的HTML表格的弹出窗口。数据库前端页面在这里:http://www.kultusportal-bw.de/,Lde/Startseite/schulebw/Schuladressen。
- 如果我只是点击(空)搜索文本框中的回车键,我会得到一个类似于这样的结果:
- 然后,如果我点击第一个链接“Aach, Grund- und Hauptschule”,JavaScript会打开一个包含地址详细信息的弹出窗口,如下所示:
超链接本身只被称为“javascript:ShowDetails('04146900')”,所以它不会导航到一个单独的页面,而是执行一些脚本(不幸的是,这超出了我的知识范围)。
我想要自动将超链接的名称和弹出窗口中的HTML内容复制到一个文本或HTML文件中,对所有的超链接都要执行此操作。
我该如何做呢?
我尝试使用Firefox浏览器中的LIVE HTTP Headers来查看点击链接后发生了什么,结果如下:
https://stewi.kultus-bw.de/didsuche/DienststellenSucheWebService.asmx/GetDienststelle POST /didsuche/DienststellenSucheWebService.asmx/GetDienststelle HTTP/1.1 Host: stewi.kultus-bw.de User-Agent: (...) Accept: application/json, text/javascript, */*; q=0.01 Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Content-Type: application/json; charset=utf-8 X-Requested-With: XMLHttpRequest Referer: https://stewi.kultus-bw.de/didsuche/ Content-Length: 20 Cookie: ASP.NET_SessionId=3ly0zyatmod1tqoe2sbwwe0p Connection: keep-alive Pragma: no-cache Cache-Control: no-cache {'disch':'04146900'} HTTP/1.1 200 OK Cache-Control: private, max-age=0 Content-Type: application/json; charset=utf-8 Server: Microsoft-IIS/7.5 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Date: Sun, 05 Jan 2014 11:07:20 GMT Content-Length: 651
我尝试通过组合一个链接来“模拟”点击超链接的操作,如下所示:**https://stewi.kultus-bw.de/POST/didsuche/DienststellenSucheWebService.asmx/GetDienststelle{'disch':'04146900'}
**,但这并不起作用。
自动阅读由HTML页面上的JavaScript创建的超链接内容的问题是如何出现的以及如何解决的呢?
问题出现的原因是在JavaScript中调用了名为'LoadDetailAnsicht'的函数,该函数是通过ajax调用进行POST请求的。由于数据以json格式发送,所以无法获得正常的URL。
解决方法是使用命令行工具curl来下载内容,即使是POST请求也可以。以下是一些可能有所帮助的说明。
文章内容如下:
你可以使用Chrome的调试器来检查JavaScript。不管怎样,对你的问题的快速回答是:
方法ShowDetails调用了函数'LoadDetailAnsicht'(这里德式英语很明显)...
function LoadDetailAnsicht(disch) { $.ajax({ type: "POST", contentType: "application/json; charset=utf-8", url: "DienststellenSucheWebService.asmx/GetDienststelle", data: "{'disch':'" + disch + "'}", dataType: "json", success: function (msg) { DetailAnsichtCallback_CallbackComplete(msg.d); } }); }
这是一个带有json和可能的POST负载的ajax调用。也就是说,数据以json格式进行POST请求。这就是为什么你无法获得正常的URL。
谢谢!我不一定需要一个正常的URL,但我需要内容。抱歉,我现在完全不知所措,因为我不懂AJAX或JavaScript。是否有一种简单的方法可以执行每个链接的脚本(例如上面示例中的另一个ID04146900
),并将创建的窗口内容写入文件或复制到剪贴板?
我还尝试使用火狐浏览器中的Live HTTP headers来查看发生了什么(请参见我的编辑内容),但这也行不通...有没有什么提示可以让它起作用?
这是一个POST请求,它会将你试图放在URL后面的东西与请求一起发送。以下是GET方法(你尝试使用的方法)和POST方法之间的区别的解释:w3schools.com/tags/ref_httpmethods.asp
谢谢你提供的链接。"Post请求不能被书签保存"的意思是,我不能通过超链接来执行此请求,就像我尝试的那样吗?如果是的话,我还能做什么来实现这个目标?我能修改脚本以在单独的标签中显示详细信息吗?
是的,这就是它的意思。但你可以尝试下载一个叫做curl的实用工具,你可以使用命令行来下载即使是POST请求的内容。以下是一些可能有所帮助的说明:stackoverflow.com/questions/14978411/…
问题的出现原因是在点击超链接时,无法自动读取超链接上的内容。这是由于超链接是通过JavaScript在HTML页面上创建的。
要解决这个问题,可以使用cURL工具。可以从Chrome开发工具的网络选项卡中复制相应的cURL调用。在下面的cURL命令中,将命令中的"DATA_ID"字段替换为超链接中的任何"disch" id(例如javascript:ShowDetails('04146900')),或者从HTML表中提取所有id并对其进行迭代。
以下是cURL命令的示例:
curl 'https://lobw.kultus-bw.de/didsuche/DienststellenSucheWebService.asmx/GetDienststelle' \ -H 'Connection: keep-alive' \ -H 'sec-ch-ua: "Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"' \ -H 'Accept: application/json, text/javascript, */*; q=0.01' \ -H 'X-Requested-With: XMLHttpRequest' \ -H 'sec-ch-ua-mobile: ?0' \ -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36' \ -H 'Content-Type: application/json; charset=UTF-8' \ -H 'Origin: https://lobw.kultus-bw.de' \ -H 'Sec-Fetch-Site: same-origin' \ -H 'Sec-Fetch-Mode: cors' \ -H 'Sec-Fetch-Dest: empty' \ -H 'Referer: https://lobw.kultus-bw.de/didsuche/' \ -H 'Accept-Language: en-GB,en-US;q=0.9,en;q=0.8' \ --data-raw $'{\'disch\':\'DATA_ID\'}' \ --compressed
这个解决方法对我有效。