这很容易在古典HTML如何使用javascript导航获取页面上的所有链接?
$('a').map(function(){return this.href}).toArray()
但是,如果导航是通过JavaScript的东西像做:
<a href='#' onclick='someFn()'>Some link</a>
这是不可能知道的网址不执行该someFn
功能,如果你执行它 - 它不会返回URL,而是将页面导航(我无法控制someFn
函数,不知道里面是什么或者如何改变它)。
因此,为了从页面获得所有N个链接,您必须加载所有这N个页面。这是非常缓慢和低效的。
如何解决?
可能的解决方案 - 如果有可能拦截对window.location
的呼叫 - 解决问题。您只需点击所有这些链接并检查window.location
的值,而无需加载新页面。但我不知道这是否可行(我使用phantomjs,看起来它不能这样做)。
注意
有HTML中没有URL时,执行的JavaScript即使经过。是的,在某些情况下,您可以使用浏览器模拟器执行JS,然后解析浏览器中动态生成的HTML。但它不是这样的,我用的浏览器模拟器(phantomjs),但即使JS执行,所有导航纯JS完成的,与
<a onclick=tonsOfWeirdBlackBoxFunctionsYouCantChange>
你想要归档那个东西?可能还有另一种方法可以做到这一点。例如,YOu可以解析链接的整个代码,无论它们出现在哪个上下文中。 –
基本上,我需要访问一些网站的网站,我不能访问所有的网站,因为有太多。如果它是我需要访问的页面,我可以通过URL进行检测。我需要获取URL列表来分析并选择要访问的URL(不加载所有内容)。 –
因此,解析源代码寻找任何看起来像URL的东西是没有问题的,对吧?忽略上下文。这仍然不会给你动态创建的URL,但是如果不执行JavaScript,则不可能。 –