我需要深入研究我的网页并提取外部CSS和JS文件,以便对我的Web测试进行一些比较。
我用过:
IJavaScriptExecutor ijse_JS = iwd as IJavaScriptExecutor;
string sHtml = ijse_JS.ExecuteScript("return document.documentElement.innerHTML;").ToString();
我希望以字符串形式使用外部CSS和JS文件,以便以后查询。
因为这是用于c#的,所以我会尽一切可能提供,它不一定是硒,无论它起作用什么
为什么要执行此操作的中心前提是,因为我想在尚不知道该脚本的站点上运行此脚本。我想对其进行扫描,对某些内容进行更改,然后进行另一次扫描并记下差异,然后将其吐出到可以查询的电子表格中。现在,我有了Dictionary>,它带有Tag名称的键,并且值是该标签可用的属性的集合。我还有一个充满所有可能的CSS属性的集合,我一直在做的是遍历Tag的集合,创建IWebElement的集合,然后遍历整个集合
string sCurrentTag = "";
//iterate through a Hashset<string> of all of the possible tags for HTML (premade)
for (int k = 0; k < HashSet_of_All_Tags.Count; k++)
{
//I want to find all of the instances of that specific tag now
sCurrentTag = HashSet_of_All_Tags.ElementAt(k);
//create a collection of IWebElement that is of every instance of the Tag that I'm looking at
IReadOnlyCollection<IWebElement> iwe = iwebdriver_object.FindElements(By.TagName(sCurrentTag))
//now run through it and get all of the styling and attribute values (if they are set)
for(int j = 0; j < iwe; j++)
{
IWebElement Element_Im_Looking_At = iwe.ElementAt(j);
//This finds the tag that I'm looking at, and then it will look at the corresponding Hashset at that spot in the dictionary
//that holds all of the relavent attributes for that element i.e. the 'div' key will have 'align' and all global attributes
//packed into the Hashset. If there is nothing set, then don't bother keeping it. If something is set, keep it in the format
//of "Tag=Attribute_Value; ". I will then iterate through this string later with RegEx to get the information that I care about
for (int i = 0; i < dsh_Tags[sEle.TagName].Count(); i++)
{
//reset the strings to hold onto all of the attribute values and CSS values
sAttr = sStyle = "";
//dsh_Tags is a Dictionary<string, Hashset<string>>
sCurr = dsh_Tags[Element_Im_Looking_At.TagName].ElementAt(i);
s = Element_Im_Looking_At.GetAttribute(sCurr);
if (s != null && s != "")
sAttr += $"{sCurr}={s}; ";
}
//This loop iterates through all CSS properties and gets every value, and packs it into a string in the same format as the one above
//but does it for CSS styles
for (int i = 0; i < hs_AllCSSProp.Count(); i++)
{
sCurr = hs_AllCSSProp.ElementAt(i);
s = Element_Im_Looking_At.GetCssValue(sCurr);
if (s != null && s != "")
sStyle += $"{sCurr}={s}; ";
}
}
}
您可能会聚集,所以需要大量的开销。我已经做了很多关于线程的事情,这些事情对提高速度有帮助,但是这仍然需要很长时间,因为我必须遍历整个HTML标签,它们的相应属性以及整个CSS。属性。我这样做是因为,同样,我不完全清楚我最初在看什么。我的计划是做到这一点,以便首先浏览CSS和JavaScript,并使用regex查找可以更改的所有属性以及此处要更改的所有CSS,然后创建要小得多的集合。到那些对应的元素,仅遍历我想要的事物(通常每个元素只有2或3个属性,每个元素4或5个CSS属性),而不是每个可能的元素。当我在一个页面上进行此操作时,我知道它的全部内容以及将要发生的变化并且仅包含我关心的内容,它使速度提高了约90%。
因此,这使我想到了现在。如果我可以动态地弄清楚要查看的内容,然后在要查看的站点的侧面创建各种库,那么我可以运行一个脚本,该脚本将扫描所有的css和所有的脚本一次,存储这些值,然后扫描整个页面,进行一次更改,然后再次扫描整个页面,除了这次以外,不扫描其他差异,我只看我需要的东西。