2012-05-10 6 views
0

웹 자동화 도구로 작업하고 있습니다. 도구를 실행 한 후에는 관련 웹 사이트에서 쿠키를 작성하여 다시 실행하려고하면 자동화가 중단됩니다. 이 때문에 자동화가 시작되기 전에 쿠키를 삭제하고 싶습니다. 쿠키를 실제로 생성하는 도메인에 액세스 할 권한이 없습니다. 이것이 가능한가? 쿠키를 조작하는 방법을 알고 있지만 다른 웹 사이트에서 쿠키에 액세스하려고하면 해당 논리가 모두 실패합니다.다른 도메인의 쿠키 삭제

또한 피할 수 있으면 WebBrowser 컨트롤을 만들고 싶지 않습니다. 나는 httpWebRequests로 모든 것을하려고 노력하므로 멋지게 보입니다.

+1

대부분의 웹 자동화 도구 (예 : Selenium)는 이와 같은 수정 작업을 지원합니다. 무엇을 도구로 사용하고 있습니까? (아니, 당신은 직접적인 보안 위반이 될 수 있으므로 웹 사이트를 통해 직접 할 수는 없습니다.) –

+0

.NET 4에서 자동화 도구를 쓰고 있습니다. 이미 존재하는 도구를 사용하고 있지 않습니다. –

+1

그냥 셀렌을 사용하지 않는 이유는 무엇입니까? –

답변

2

테스트 환경이 Windows 시스템에서 실행되고있는 것처럼 들리면 pInvoke를 사용하여 캐시를 조작 할 수 있습니다. 다음 네 가지 방법이 필요합니다. 불행히도이 코드는 내가 속한 회사가 소유하고 있기 때문에 여기에 붙여 넣을 수는 없습니다. 여기에는 "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

당신은 당신이 가능성이 다른 곳에서 X.

보다오고 HTTP 요청을 사용하여 웹 사이트 X에 의해 넣어 쿠키를 제거 할 수 없습니다한다 : 당신은에 automatation 도구를 사용

  • 을 브라우저 UI에서 쿠키 제거를 자동화합니다.
  • 로컬 캐시 (또는 다른 의미)로 x 도메인과 관련된 ip를 변경하여 웹 사이트 X를 가짜로 만듭니다.
0

모든 쿠키가 삭제되었습니다. 서버가 설정되는 방식이 많아서는 안되기 때문에 문제가되지는 않습니다. 모든 쿠키를 실행하는 것이 그것이 나를 위해 일한 유일한 방법이었습니다. 폴더를 삭제하려고 할 때 권한 수준에 대한 오류가 발생합니다.

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 메서드를 사용하면 파일에 기록 된 쿠키뿐만 아니라 메모리에있는 쿠키도 모두 포함된다는 것입니다. 특정 경우에는 웹 브라우저 컨트롤을 사용하고 있으며 쿠키가 메모리에 남아있는 동안 일부 쿠키를 삭제해야합니다. –

+0

흥미로운 점입니다.삭제해야 할 쿠키는 삭제 될 때까지 메모리에 저장되어서는 안되기 때문에 논점입니다. 그러나 메모리에서 쿠키를 제거해야하는 경우이를 명심하십시오. –