Мне нужно покопаться в моей веб-странице и извлечь внешние файлы CSS и JS, чтобы сделать некоторые сравнения для моего веб-тестирования.
Я использовал:
IJavaScriptExecutor ijse_JS = iwd as IJavaScriptExecutor;
string sHtml = ijse_JS.ExecuteScript("return document.documentElement.innerHTML;").ToString();
Я бы хотел, чтобы Внешние файлы CSS и JS в форме строки для меня позже опрашивали.
Так какэто для C #, я бы взял все, что вы можете дать, это не обязательно должен быть селен, просто все, что работает
Основная предпосылка, почему я делаю это, потому что я хочу запуститьэтот скрипт на сайте, где я еще не знаю, что у него есть.Я хочу запустить на нем сканирование, внести изменения во что-то, а затем сделать еще одно сканирование, заметить различия и выложить его в электронную таблицу, которую я могу запросить.Прямо сейчас у меня есть Словарь> с ключом имен тегов, а значения представляют собой набор атрибутов, которые могут использоваться этим тегом.У меня есть еще одна коллекция, полная всех возможных свойств CSS, и я выполняю ее, просматривая коллекцию тегов и создавая коллекцию IWebElements, а затем перебирая всю эту коллекцию
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}; ";
}
}
}
Как вы, возможно, сможете собрать, есть IMENSE количество накладных расходов.Я сделал кучу вещей с потоками и вещами, которые помогли со скоростью, но это все еще занимает очень много времени, так как я должен пройти через всю коллекцию тегов HTML, и их соответствующие атрибуты, и всю коллекцию CSSсвойства.Я делаю это, потому что, опять же, я не знаю точно, на что я смотрю изначально.Я планировал сделать так, чтобы я сначала просматривал CSS и JavaScript и использовал регулярные выражения, чтобы найти все атрибуты, которые можно изменить, и весь CSS, который здесь изменяется, а затем создал коллекции, которые намного меньшедля этих соответствующих элементов, перебирайте только те вещи, которые мне нужны (которые обычно состоят только из 2 или 3 атрибутов и 4 или 5 свойств CSS для каждого элемента) вместо каждого возможного.Когда я делал это на странице, где я знал все об этом и о том, что изменится, и включал только то, что мне не безразлично, это увеличило скорость на ~ 90%.
Так что это подводит меня к тому, что я сейчас нахожусь.Если бы я мог динамически выяснить, что мне нужно посмотреть, а затем создать своего рода библиотеки на стороне сайта, на который я смотрю, я мог бы запустить скрипт, который бы сканировал все CSS и все сценарии ОДИН РАЗсохраните эти значения, а затем отсканируйте всю страницу, внесите одно изменение и снова отсканируйте всю страницу, а не различия, за исключением этого времени, я буду искать только то, что мне нужно.