gpt4 book ai didi

javascript - 如何使用javascript导航获取页面上的所有链接?

转载 作者:行者123 更新时间:2023-12-02 17:47:44 24 4
gpt4 key购买 nike

在经典 HTML 中很容易

$('a').map(function(){return this.href}).toArray()

但是,如果导航是通过 JavaScript 完成的,例如:

<a href='#' onclick='someFn()'>Some link</a>

不执行 someFn 就不可能知道 url函数,如果你执行它 - 它不会返回 url,而是导航页面(我无法控制 someFn 函数,并且不知道里面有什么或如何更改它)。

因此,为了从页面获取所有 N 个链接,您必须加载所有这 N 个页面。这是非常缓慢且低效的。

如何解决?

可能的解决方案 - 如果可以拦截对 window.location 的调用- 问题解决了。您只需单击所有这些链接并检查 window.location 的值无需加载新页面。但我不知道这是否可以做到(我使用phantomjs,似乎不能做到)。

注意

即使在执行 JavaScript 后,HTML 中也没有 URL。是的,在某些情况下你可以使用浏览器模拟器来执行JS,然后解析浏览器中动态生成的HTML。但事实并非如此,我使用浏览器模拟器(phantomjs),但即使在执行 JS 后,HTML 中也没有 URL 和导航,所有导航都是在纯 JS 中完成的,带有

<a onclick=tonsOfWeirdBlackBoxFunctionsYouCantChange>

最佳答案

如果您尝试解析页面上已执行的源代码,则需要使用正则表达式函数来字符串搜索这些 URL。

如果您尝试在运行时解析代码的位置并将它们保存到数组或其他东西中 - JavaScript 中的每个函数每个对象都有一个 toString 函数。

也就是说 --- 如果您将函数定义为对象:

//Although you should really be using a parameter for this...
//...I'm trying to hold context with your use case.
var redirectToContact = function(){
window.location = "/contact.html";
}

您可以redirectToContact.toString()并对其运行正则表达式函数:

也许类似:

var url = redirectToContact.toString();
console.log( url.match( 'window.location = "(.*)";' )[1] );

关于javascript - 如何使用javascript导航获取页面上的所有链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21611521/

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