2017-02-21 7 views
-1

しばらく私はC#でコーディングしているので、自分と友人のためにいくつかの小さなツールを作成しようとしていますが、問題が発生しています。C#HtmlAgilityPack値を更新する

これは問題です。私はHmtlAgilityPackを使用して、いくつかの異なるアクションのためにそれを使用するために変化する価値を得たいと考えています。しかし問題は、プログラムを再起動するまで、値が同じ値に固定されてしまうことです。それは最初のウェブサイトをロードしますので、ここで

public static void Main(string[] args) 
    { 
     Console.WriteLine("Running the program!"); 
     Console.WriteLine("Reading the value!"); 
     int i = 0; 
     string url = "Website"; 
     while (i < 300) 
     { 
      i++; 
      HtmlWeb web = new HtmlWeb(); 
      HtmlDocument LoadWebsite = web.Load(url); 
      HtmlNode rateNode = LoadWebsite.DocumentNode.SelectSingleNode("//div[@class='the-value']"); 
      string rate = rateNode.InnerText; 
      Console.WriteLine(i + ". " + rate); 
      Thread.Sleep(1000); 

     } 
     Console.WriteLine("Done"); 
     Console.ReadLine(); 
    } 

:だからここ

は、私が使用しているコードです。次にdivから値を取得します。その後、私はそれをチェックできるように値を書き込みます。しかし、同じ価値を書いているだけです。ここ

私の質問は、私は、私は価値が数秒ごとに変更し、私は私のウェブサイトから最新の値を必要とするので、最新の値を取得するために変更する必要がわからないこと、です。システムを稼働させ続けるためには値が必要なのと同じです。

+0

後 'Thread.Sleep'、明確なすべてのもの、すなわち'ウェブ= null'なので、 'LoadWebsite = null'なので、それはあなたに同じレコードを与えるかどうかを次の反復をご確認ください。 –

+0

提案していただきありがとうございますが、それは変更されていないか、少なくともそれはすばやく変更されませんでした。たぶん、別の面を最初に読み込んでから最初の面をもう一度読み込んだり、プログラムのキャッシュなどをきれいにして値を乗り切るなど、完全に変更しなければならないことがあります。 ところで値が変更されたが、一度だけ2分のようにあなたが求めるものの無関係なものの – Varmint

+0

を遅らせるための方法であるいは、 'Timer'代わりに、アプリケーション内の状態を応答しない原因となるメインスレッドを寝ての使用することができます。 – mcy

答えて

0

ループの外あなたのHtmlWeb web = new HtmlAgilityPack.HtmlWeb();を宣言し、すべてのforループを作成する必要はありません。 クロールするWebサイトにキャッシュの問題がある可能性があります。

セットweb.UsingCache = false;

すべての呼び出しが異なるようにランダムな文字列を付加しても機能しない場合は、ランダムな文字列を追加します。

コード:

HtmlWeb htmlWeb = new HtmlAgilityPack.HtmlWeb(); 
htmlWeb.UsingCache = false; 
int i = 0; 
while (i < 300) 
{ 
    var uri = new Uri($"yoururl?z={Guid.NewGuid()}"); 
    i++; 
    HtmlAgilityPack.HtmlDocument LoadWebsite = htmlWeb.Load(uri.AbsoluteUri); 
    HtmlNode rateNode = LoadWebsite.DocumentNode.SelectSingleNode("//div[@class='the-value']"); 
    string rate = rateNode.InnerText; 
    Console.WriteLine(i + ". " + rate); 
    Thread.Sleep(1000); 
} 
+0

htmlWeb.UsingCache = false;私のために働かない。私はHtmlWebを使うことができますが、UsingCacheを見つけられません。 または、最初に追加する必要があるものがありませんか? – Varmint

+0

どのバージョンのHttpAgilityPackを使用していますか? – Zroq

+0

私が見ることができる限り、最新のバージョンです。 Visual Studioはそれがv4.0.30319だと言っています あなたが知りたいのであれば、私は4.5フレームワーク版を使用しています – Varmint

関連する問題