Здравствуйте, у в а ж а е м ы е!
Нужно WebBrowser-ом сходить по ссылке, выдрать из загруженной страницы ссылку, и сходить новым браузером по ней,
вот как я это делаю:
public MainForm()
{
InitializeComponent();
browser = new WebBrowser();
// отключаю сообщения об ошибках
this.browser.ScriptErrorsSuppressed = true;
// подписываю Start на browser.DocumentCompleted
this.browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(Start);
}
// счёлкую по кнопке
private void ParseButton_Click(object sender, EventArgs e)
{
String link = "file://localhost/C:/test.htm";
browser.Navigate(link);
}
// и по завершению загрузки страницы
// вызываю метод ParsePage класса PageParser
private void Start(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (((WebBrowser)sender).ReadyState == WebBrowserReadyState.Complete)
{
PageParser parser = new PageParser();
parser.ParsePage((WebBrowser)sender);
}
}
далее, нужно выхватить определенную ссылку со страницы, и другим (новым) WebBrowser-ом
сходить на неё и забрать ещё какой-то текст.
Итак, мы вызвали parser.ParsePage((WebBrowser)sender);
//
//class PageParser
public void ParsePage(WebBrowser browser)
{
// получили коллекцию ссылок
HtmlElementCollection references = browser.Document.Links;
foreach (HtmlElement el in references)
{
String line;
if (el.OuterHtml != null)
{
// взяли html
line = el.OuterHtml.ToString();
//и если в этом html есть нужный текст
if (line.Contains(_thatNeedToFind))
{
//выдрали оттедова ссылку
_newURL= GetURL(line);
//и в отдельном потоке пытаемся сходить по ссылке
Thread thread = new Thread(GoThread);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
}
}
}
}
private void GoThread()
{
var browser = new WebBrowser();
browser.ScriptErrorsSuppressed = true;
// подписываю Start на browser.DocumentCompleted
browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(Start);
browser.Navigate(_newURL);
// после этой строчки отладчик сразу скачет на 4 строчки вверх, на начало метода,
// один раз ещё проходит и выходит
}
// вот сюда отладчик не попадает, а надо бы!
private void Start(object sender, WebBrowserDocumentCompletedEventArgs e)
{
var w = new WebBrowser();
w = (WebBrowser)sender;
if (w.ReadyState == WebBrowserReadyState.Complete)
{
}
}
куда копать? Может что с областью видимости browser напортачил?