C # разбор HTML с помощью JavaScript - PullRequest
1 голос
/ 25 февраля 2011

Мне нужно разобрать HTML-код после выполнения кода Javascript внутри этого документа. Я использую контроль webBrowser для загрузки и контроля HTML.

Например, у меня есть некоторый JavaScript в моем HTML-коде.

<script type="text/javascript" src="http://site.com/script.js"></script>

Спасибо за ваши ответы.

P.S. Я имею в виду: я должен проанализировать весь код с некоторым текстом, который может вернуть JavaScript. Итак, я могу разобрать документ только после выполнения javascript. Потому что мне нужна некоторая часть динамического контента, которая будет добавлена ​​с помощью JavaScript.

Добавлена ​​

Я получил контент, сгенерированный javascript. Я пропустил этот, потому что я искал некоторый контент в iframe, сгенерированный с помощью javascript.

А теперь у меня есть еще один вопрос. В моем документе у меня есть несколько iframes. Я пытаюсь получить контент из некоторых кадров. Следующим способом:

        var htmlcol = webBrowser1.Document.Window.Frames;
        foreach (HtmlWindow item in htmlcol)
        {
            try
            {
                Console.Write(item.Name);
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("Something wrong");
            }

        }

Но в этом случае у меня есть исключение: ' System.UnauthorizedAccessException '. Как я могу получить доступ к html фреймам?

P.P.S. Извините за мой плохой английский:)

Ответы [ 3 ]

1 голос
/ 25 февраля 2011

Я думаю, что вам будет удобнее использовать DOM , как представлено с помощью свойства Document WebBrowser.

Вы можете либо пройти по вложенным элементам Body, либо найти то, что хотите, используя GetElementById или GetElementsByTagName.

DOM должен автоматически обновляться с учетом изменений, вносимых JavaScript на странице.

0 голосов
/ 09 февраля 2016

Пожалуйста, прочитайте Phantomjs для вашей проблемы и используйте setTimeOut для открытия страницы.

Это может выглядеть так:

var page = require('webpage').create();

page.open("https://sample.com", function(){
    page.evaluate(function(){
        // Execution somethings before page load. for Example: 
        localStorage.setItem("something", "whatever");// Set LocalStorage for browser before open
    });

    page.open("https://sample.com", function(){
        setTimeout(function(){
            console.log(page.content); //page source

            // Where you want to save it    
            page.render("screenshoot.png")  

            // You can access its content using jQuery
            var fbcomments = page.evaluate(function(){
                return $("body").contents().find(".content") 
            }) 

            phantom.exit();
        },10000)
    });    
});
0 голосов
/ 25 февраля 2011

Попробуйте следующее: - Добавьте ссылку Microsoft.mshtml в ваше приложение.

Попробуйте:

public void setPage(mshtml.HTMLWindow2Class JSFile)
{
HTMLWindow2Class window = new HTMLWindow2Class();
window = JSFile;

}
public void scriptPrint()
{
IHTMLDocument2 doc = null; ;
IHTMLWindow2 parentwindow = doc.parentWindow;



parentwindow.execScript("report_back('Printing complete!')", "JScript");
}

}

Вот также статья, которая может вам помочь: http://www.dotnetcurry.com/ShowArticle.aspx?ID=194

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