使用javascript从网站获取所有出站链接

时间:2013-09-28 20:28:02

标签: javascript api google-chrome-extension

我正在开发chrome扩展程序,对这个领域来说相对较新。我目前正在处理的项目要求我的扩展程序扫描当前“网站”上的所有“网页”(即当前在浏览器的活动选项卡中打开的网站)。我需要从网站上获取并打印所有出站链接的列表(而不仅仅是当前打开的网页)。

到目前为止的进展:到目前为止,我使用chrome tabs API设法获取当前活动网页中所有出站链接的列表。我获取URL,然后使用查询函数和一个使用document.links的小脚本,我已经能够成功地为单个页面执行此操作。

问题: 我需要将其转换为迭代解决方案,并能够扫描当前页面中的所有链接,逐个点击这些链接并重复此过程对于每个链接,最后将新发现的链接添加到现有的列表集中。

我知道这不是一个小问题,基本上需要一些指导我应该使用的方法。 如果不在新标签中打开链接,我无法谨慎地点击链接。我需要一种方法来做到这一点。如果有人可以指导我完成这项工作,那就太棒了。谢谢!

3 个答案:

答案 0 :(得分:0)

如果以前完成这件事,我自己也不会费心去做。例如,您可以尝试使用此SO问题中的解决方案来收集所有链接:

How to find all links / pages on a website

答案 1 :(得分:0)

正如评论中所提到的,XHR(XMLHTTPRequest())做到了!这是我现在使用的代码(希望它可以帮助其他有类似问题的人)

var xmlHttp = null;
var allLinks = []; //set of all internal and external links
function httpGet(theUrl)
{
    xmlHttp = new XMLHttpRequest();
    xmlHttp.open( "GET", theUrl, true );
    xmlHttp.send( null );
    xmlHttp.onreadystatechange = ProcessRequest;
}

function ProcessRequest()
{
    if ( xmlHttp.readyState == 4 && xmlHttp.status == 200 )
    {           
            var container = document.createElement("p");
            container.innerHTML = xmlHttp.responseText;
            var anchors = container.getElementsByTagName("a");
            var list = [];
             for (var i = 0; i < anchors.length; i++) 
             {
                var href = anchors[i].href;
                var exists = 0;
                for(var j = 0; j < allLinks.length; j++)    // remove duplicates
                    if(allLinks[j] == href)
                        exists = 1;
                if (exists == 0)
                {
                    allLinks.push(href);
                    document.getElementById('printLinks').innerHTML += href + "<br />";
                }
             }
        }
}

这可以很好地完成工作,这样我就可以点击并分析列表中的每个URL并继续添加新找到的URL。

礼貌:StackOverflow问题和其他博客:)

答案 2 :(得分:0)

只需对下面提到的脚本应用一些过滤器,您就可以开始了。 以后,我可能会尽快更新此答案。

//未提取入站和出站链接

Links = document.querySelectorAll('a'); 
for (link in Links) 
console.log(Links[link].href);