0

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

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

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

我知道这不是一个微不足道的问题,基本上需要一些关于我应该使用的方法的指导。如果不在新标签中打开它们,我就无法谨慎地点击链接。我需要一种方法来做到这一点。如果有人能指导我完成这个,那就太好了。谢谢!!

4

3 回答 3

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 问题和其他博客 :)

于 2013-10-01T20:33:50.773 回答
0

当它以前完成时,我不会费心自己实现它。您可以尝试此 SO question 中的解决方案,例如收集所有链接:

如何查找网站上的所有链接/页面

于 2013-09-30T00:12:53.017 回答
0

只需对下面提到的脚本应用一些过滤器,就可以了。将来我可能会在有时间后立即更新此答案。

//提取入站和出站链接的数量

Links = document.querySelectorAll('a'); 
for (link in Links) 
console.log(Links[link].href);
于 2020-09-05T06:32:22.337 回答