为我可怜的英语道歉。
我必须将更新后的网页的详细信息与未更新的网页进行比较,例如所有元素的位置和大小。
我首先使用google diff。如果html源代码相同,我会使用selenium Webdriver来比较元素。
这是代码。
IWebDriver d1 = new FirefoxDriver();
IWebDriver d2 = new FirefoxDriver();
d1.Navigate().GoToUrl(URL);
d2.Navigate().GoToUrl(URL);
compare();
d1.Navigate().GoToUrl(URL2);
d2.Navigate().GoToUrl(URL2);
compare();
public void compare()
{
List<IWebElement> list1 = new List<IWebElement>();
foreach(IWebElement e in d1.FindElements(By.CssSelector("*")))
{
list1.Add(e);
}
foreach(IWebElement e in d2.FindElements(By.CssSelector("*")))
{
list2.Add(e);
}
for(int i = 0; i<list1.Count; i++)
{
if(list1[i].Size.ToString()!=list2[i].Size.ToString())
{
//not the same size
}
if(list1[i].Location.ToString()!=list2[i].Location.ToString())
{
//not the same location
}
}
}
但如果它读了太多页面就没用了。 它可以比较不匹配的元素,例如将page1中的A Element与page2中的B Element进行比较。
所以我尝试使用HtmlAgilityPack获取带有html源的所有元素的Xpath列表,然后调用selenium以通过Xpath查找元素。
幸运的是,但这是一个问题。
如果有JavaScripts会在页面的网页中插入一些html标记,而selenium会执行它们,那么HtmlAgilityPack会得到错误的Xpath。
例如,html是
<div>
</div>
所以Xpath是//div
。
但是在执行js之后,html就是
<div>
<div>
</div>
</div>
xpath是//div/div
。
但是HtmlAgilityPack仍然获得//div
因为它读取了html源代码。
我怎么解决?
感谢阅读。