2012-05-10 23 views
0

私はWebオートメーションツールを使っています。ツールを一度実行すると、関連するWebサイトは、再度実行しようとすると自動化を破るクッキーを作成します。このため、私はオートメーションが始まる前にクッキーを削除したいと思います。私は実際にクッキーを作成するドメインにアクセスすることはできません。これは可能ですか?私はクッキーを操作する方法を知っていますが、別のウェブサイトからクッキーにアクセスしようとすると、そのロジックはすべて失敗します。別のドメインからのクッキーの削除

また、私はそれを避けることができますWebBrowserコントロールを作成したくありません。私はhttpWebRequestsですべてをやろうとしているので、見た目が良くなります。

+1

ほとんどのWeb自動化ツール(Seleniumなど)は、このような変更をサポートしています。あなたはあなたのツールとして何を使用していますか? (そして、いいえ、あなたはウェブサイトを通じてそれを直接行うことはできません)。 –

+0

私は.NET 4でオートメーションツールを書いています。私はすでに存在するツールを使用していません。 –

+1

セレンを使用してみませんか? –

答えて

2

テスト環境がWindowsシステム上で実行されている場合は、pInvokeを使用してキャッシュを操作できます。以下の4つの方法が必要です。残念ながら、このコードは私の仕事ではなく私の会社で所有していますので、ここに貼り付けることはできません。これは、 "FindFirstUrlCacheEntry"と "FindNextUrlCacheEntry"を使用してキャッシュ内のエントリを反復することを含む。キャッシュエントリがクッキーであるかどうか、また興味のあるドメインに属しているかどうかを確認してください。

[DllImport (@"wininet", SetLastError = true, CharSet = CharSet.Auto)] 
private static extern IntPtr FindFirstUrlCacheEntry ([MarshalAs (UnmanagedType.LPTStr)] string searchPattern, IntPtr ptrCacheEntryInfo, ref int cacheEntryInfoSize); 

[DllImport (@"wininet", SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] 
private static extern bool FindNextUrlCacheEntry (IntPtr ptrCacheHandler, IntPtr ptrCacheEntryInfo, ref int cacheEntryInfoSize); 

[DllImport (@"wininet", SetLastError = true, CallingConvention = CallingConvention.StdCall)] 
private static extern bool FindCloseUrlCache (IntPtr ptrCacheEntryInfo); 

[DllImport ("wininet.dll", SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] 
private static extern bool DeleteUrlCacheEntry (IntPtr lpszUrlName); 
0

あなたは2つの可能性持っているX.

よりも、どこか別の場所から来たHTTPリクエストを使用して、ウェブサイトのXで入れたクッキーを削除できないようにする必要があり:あなたはにautomatationツールを使用

  • をブラウザのUIからクッキーの削除を自動化します。
  • ローカルキャッシュのxドメインに関連するip(または別の手段)を変更して、ウェブサイトXを偽装します。
0

すべてのCookieが消去されました。サーバーが設定されている方法は多くありませんので、実際には問題にはなりません。すべてのクッキーを実行することが私のために働いた唯一の方法でした。フォルダを削除しようとすると、私の特権レベルについてエラーが表示されます。

private void ClearCookies() 
    { 
     string[] theCookies = System.IO.Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.Cookies)); 

     foreach (string currentFile in theCookies) 
     { 
      try 
      { 
       System.IO.File.Delete(currentFile); 
      } 
      catch (Exception ex) { } 
     } 
    } 
+0

うん、これはあなたが必要とするもののために働くようです。私が指摘したいのは、Windows SDKメソッドを使用すると、ファイルに書き込まれたものだけでなく、メモリ内にあるすべてのCookieが含まれることです。特定のケースでは、Webブラウザコントロールを使用しており、Cookieの一部がまだメモリに残っている間に削除する必要があります。 –

+0

これは興味深い点です。クリアする必要があるクッキーは決して記憶に残ってはいけませんので、それは問題ですが、メモリ内のクッキーを削除する必要がある場合は、そのことを念頭に置いておきます。 –

関連する問題