Как извлечь внешние JS и CSS файлы веб-страницы с помощью Selenium - PullRequest
0 голосов
/ 16 мая 2019

Мне нужно покопаться в моей веб-странице и извлечь внешние файлы 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 и все сценарии ОДИН РАЗсохраните эти значения, а затем отсканируйте всю страницу, внесите одно изменение и снова отсканируйте всю страницу, а не различия, за исключением этого времени, я буду искать только то, что мне нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...