自动读取由HTML页面上的JavaScript创建的超链接的内容。

6 浏览
0 Comments

自动读取由HTML页面上的JavaScript创建的超链接的内容。

我想要自动从一个作为数据库前端的网页中获取内容。该页面包含了某个地区的学校列表,每个学校名称都是一个超链接。我想要获取每个学校的所有详细信息,但这些信息只能通过一个JavaScript脚本来获取,该脚本会打开一个包含必要信息的HTML表格的弹出窗口。数据库前端页面在这里:http://www.kultusportal-bw.de/,Lde/Startseite/schulebw/Schuladressen

- 如果我只是点击(空)搜索文本框中的回车键,我会得到一个类似于这样的结果

search result

- 然后,如果我点击第一个链接“Aach, Grund- und Hauptschule”,JavaScript会打开一个包含地址详细信息的弹出窗口,如下所示:

details for search result 1

超链接本身只被称为“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'}

**,但这并不起作用。

0
0 Comments

自动阅读由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/…

0
0 Comments

问题的出现原因是在点击超链接时,无法自动读取超链接上的内容。这是由于超链接是通过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

这个解决方法对我有效。

0