我正在编写一个程序,它可以浏览各种网页并使用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有不同的名字也能正常工作?
答案 0 :(得分:3)
我认为@ AaronDigulla的回答很清楚。
我能想到的另一种选择是,当你遍历那些,在那个css文件上做一个GET,然后在开始时快速浏览文档。例如,CSS文件可能包含...
/* CSS Framework vX.X
* Author: Some Author
* License:
* Some ridiculously long license
*/
这可以缓解您的文件名更改问题。
答案 1 :(得分:2)
我知道没有可靠的方法来确定在网站中使用哪些CSS(或JavaScript)框架。
如果你很幸运,那么管理员将使用全局网址(如CDN links provided by jQuery)。
当人们开始重命名文件时,您可以尝试下载CSS文件并对其进行指纹处理(创建校验和)。
当人们更改这些文件时,那将失败。这可以自动发生; wro4j是一个框架,可以自动将所有JavaScript和CSS资源编译成一个大文件。
我也有点担心你为什么需要这些信息。而不是试图弄清楚正在使用哪个框架(以及哪个版本)寻找可能影响您的测试的实际CSS样式。