C # Internet Explorer и удаление HTML-тегов - PullRequest
2 голосов
/ 19 февраля 2012

Есть ли способ открыть процесс Internet Explorer из C #, отправить HTML-контент в этот браузер и захватить «отображаемый» контент?

Мне известны другие методы разборки html (например, HtmlAgilityPack), но я хотел бы изучить вышеупомянутый путь.

Спасибо, LG

Ответы [ 2 ]

3 голосов
/ 19 февраля 2012

Вы можете использовать элемент управления WebBrowser, который существует как для WinForms, так и для WPF, для размещения IE в вашем приложении.Затем вы можете установить в качестве источника элемента управления свой HTML-код, дождаться загрузки содержимого (используя событие LayoutUpdated, а не событие Loaded, которое возникает, когда загрузка HTML завершена, не обязательно организована и все динамическое выполнение JS), а затемсвойство Document для получения HTML.

0 голосов
/ 19 февраля 2012
    public List<LinkItem> getListOfLinksFromPage(string webpage)
    {
        WebClient w = new WebClient();
        List<LinkItem> list = new List<LinkItem>();
        try
        {
            string s = w.DownloadString(webpage);

            foreach (LinkItem i in LinkFinder.Find(s))
            {
                //Debug.WriteLine(i);
                //richTextBox1.AppendText(i.ToString() + "\n");
                list.Add(i);
            }
            listTest = list;
            return list;
        }
        catch (Exception e)
        {
            return list;
        }

    }

    public struct LinkItem
    {
        public string Href;
        public string Text;

        public override string ToString()
        {
            return Href;
        }
    }

    static class LinkFinder
    {
        public static List<LinkItem> Find(string file)
        {
            List<LinkItem> list = new List<LinkItem>();

            // 1.
            // Find all matches in file.
            MatchCollection m1 = Regex.Matches(file, @"(<a.*?>.*?</a>)", RegexOptions.Singleline);

            // 2.
            // Loop over each match.
            foreach (Match m in m1)
            {
                string value = m.Groups[1].Value;
                LinkItem i = new LinkItem();

                // 3.
                // Get href attribute.
                Match m2 = Regex.Match(value, @"href=\""(.*?)\""",
                RegexOptions.Singleline);
                if (m2.Success)
                {
                    i.Href = m2.Groups[1].Value;
                }

                // 4.
                // Remove inner tags from text.
                string t = Regex.Replace(value, @"\s*<.*?>\s*", "",
                RegexOptions.Singleline);
                i.Text = t;

                list.Add(i);
            }

            return list;

        }
    }

Кто-то еще создал регулярные выражения, поэтому я не могу взять кредит на это, но приведенный выше код откроет объект веб-клиента для переданной веб-страницы и будет использовать регулярные выражения для поиска всех дочерних ссылок для этой страницы. Не уверен, что это то, что вы ищете, но если вы просто хотите «захватить» весь этот HTML-контент и сохранить его в файл, вы можете просто сохранить строку «s», созданную в строке «string s = w» .DownloadString (веб-страницы);» в файл.

...