3

我正在编写一个爬取各种网页并使用 Selenium 进行一些测试的程序。现在我想找出这些网站上使用了哪些 CSS 框架来获得一些统计数据。现在,我只需检查 FireFox Webdriver 是否在页面中链接了具有特定框架名称的 .css 文件: Iterator<WebElement> divWebElementIteratorCSS = webDriver.findElements(By.xpath("//link[@rel='stylesheet']")).iterator();

然后我检查找到的 .css 文件的名称是否包含我要检查的 CSS 框架之一的名称:

if ( src.contains( frameWorkName ) && cssFrameWorks.get( frameWorkName ) == false ) {
    result.addAttribute("Framework", "STRING", frameWorkName);
    result.setPercent( 100 );
    result.setSuccessful( true );
    cssFrameWorks.put( frameWorkName, true );
}

Hashmap frameWorkName 包含我感兴趣的所有框架名称。

现在我的问题:如果网站管理员重命名了框架的.css文件,我的测试就不行了!有没有一种安全的方法来检查这个,即使 .css 有不同的名称也能工作?

4

2 回答 2

3

我认为@AaronDigulla 的回答很清楚。

不过,我能想到的另一种方法是,当您遍历这些文件时,对该 css 文件执行 GET,然后在开始时快速浏览文档。例如,一个 CSS 文件可能包含...

/*  CSS Framework vX.X
 *  Author: Some Author
 *  License:
 *    Some ridiculously long license
 */

这将缓解您的文件名更改问题。

于 2013-10-14T22:16:17.067 回答
2

我不知道确定网站中使用了哪些 CSS(或 JavaScript)框架的可靠方法。

如果幸运的话,管理员将使用全局 URL(如jQuery 提供的 CDN 链接)。

当人们开始重命名文件时,您可以尝试下载 CSS 文件并对其进行指纹识别(创建校验和)。

当然,当人们更改这些文件时,这将失败。这可以自动发生;wro4j是一个框架,它会自动将所有 JavaScript 和 CSS 资源编译成一个大文件。

我也有点担心你为什么需要这些信息。与其试图找出正在使用的框架(以及哪个版本),不如寻找正在应用的可能会影响您的测试的实际 CSS 样式。

于 2013-10-14T07:39:52.677 回答