2011-11-11 2 views
0

J'utilise une boucle pour parcourir une page de moteur de recherche afin de collecter des données et, pour une raison quelconque, lorsque je navigue vers la deuxième page de résultats, mon HtmlElementCollection et Regex.Match fonctions merde avec cette erreur:C# HtmlElementCollection Message d'erreur "Accès refusé" à la deuxième itération de la boucle

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) 

Voici une copie de mon code de boucle. Pouvez-vous me conseiller sur la façon de procéder et ce qui pourrait causer le problème?

while (((WebBrowser)browser).Document.GetElementById("pg-next")!=null) 
{ 
    //MessageBox.Show("hello"); 
    HtmlElementCollection col = default(HtmlElementCollection); 
    col = ((WebBrowser)browser).Document.GetElementsByTagName("a"); 
    foreach (HtmlElement e in col) 
    { 
     match = Regex.Match(e.GetAttribute("href").ToString(), @"mysite.com", RegexOptions.IgnoreCase); 
     if (match.Success) 
     {       
      this_url = e.GetAttribute("href").ToString(); 
      //MessageBox.Show(this_url); 
      match = Regex.Match(this_url, @"mysite.com", RegexOptions.IgnoreCase); 
      this_url = "https://"+match; 
      //domorestuff 
     } 
     if ((e.GetAttribute("innerHTML").ToString().Contains("Next "))) 
     { 
      f_perform_operation_on_element (e, "click", null); 
      f_sleep(2); 
     } 
    } 
} 

Mon seul conducteur de courant, et il pourrait tout à fait tort, est que le htmlelementcollection attend d'avoir les pages précédentes éléments, mais depuis que je suis une toute nouvelle déclare collection quelque chose est se foiré. Je suis vraiment confus.

L'accès est refusé à:

match = Regex.Match(e.GetAttribute("href").ToString(), @"mysite.com", RegexOptions.IgnoreCase); 

Répondre

0

Ma réponse fut, remarquez que la boucle a un élément sur lequel il clique s'il se trouve que c'est le bouton suivant. Eh bien, la boucle continue mais une nouvelle page a été chargée, et ce changement soudain de page dans une boucle d'éléments de la page a provoqué l'erreur. Donc j'ai juste arrêté la boucle après le clickoff.

1

Je pense qu'il est le e.GetAttribute qui jette l'exception ...

deux choses ... Tout d'abord, assurez-vous que vous exécutez l'application sous un compte en fiducie complet comme administrateur et deuxièmement, envisager d'utiliser htmlagilitypack pour faire des choses sur la structure html:

http://htmlagilitypack.codeplex.com/

Questions connexes