2009-12-09 3 views
4

IE를 열고, 웹 사이트를 탐색하고, 로그인 한 다음 몇 가지 파일을 업로드해야하는 C# Windows 앱 프로젝트가 있습니다.mshtml을 사용하는 C# Windows 응용 프로그램에서 프로그래밍 방식으로 웹 페이지에서 파일 형식의 입력 필드에 쓰는 방법은 무엇입니까?

나는 이것을하기 위해 shDocvW와 mshtml 라이브러리를 사용했다. IE를 열어서 웹 사이트를 탐색하고 로그인 할 수 있지만 파일을 업로드 할 수는 없습니다.

HTMLInputElement txtbox1 =(HTMLInputElement)oDoc.all.item("login", 0); 
txtbox1.value = "Login_name"; 

가 나는 또한 유사했다 - 나는 웹 사이트로 이동 한 후 사용하여 웹 사이트에 (이것은 "텍스트"타입의 입력 필드) 입력 필드에 텍스트 값을 추가 할 수 있어요

"password"유형의 입력 필드에 텍스트 값을 추가 할 수도 있습니다. 웹 사이트에 로그인 한 후 파일을 업로드해야합니다.

내가 직면하는 문제는 "파일"유형의 입력 필드에 경로 (문자열)를 추가 할 수 없다는 것입니다.

해결책을 찾을 수 없습니다.

답변

4

나는이 작업을 수행하는 여러 가지 방법을 시도하지만 IE8이 값을 만들었 기 때문에 가능하지 않았다 :이 양식에 대해 여러 POST 값을 업로드 (? 즉, 새 파일 이름을)해야하는 경우

, 여기 모습이 보안상의 이유로 읽기 전용 속성

글쎄, 난 주위에 작품을 찾았습니다. 그것은 매우 간단하지만 SendKeys의 사용이 항상 최상의 프로그래밍 솔루션으로 간주되지는 않습니다. 그러나 그것은 일을합니다.

oBrowser.Navigate("http://www.some-url.com", ref oNull, ref oNull, ref oNull, ref oNull);   

while (oBrowser.Busy) 
{ 
    System.Threading.Thread.Sleep(20); 
} 

//Locate the Input element of type="file" 
HTMLInputElement file_1 = (HTMLInputElement)oDoc.all.item("file_1", 0); 
file_1.select();   

SendKeys.Send("{TAB}"); //Navigate to the Browse button 
SendKeys.Send(" ");  //Click on the browse button 

SendKeys.Send(@"c:\Test.txt");   //File Path 
SendKeys.Send("{TAB}"); 
SendKeys.Send("{ENTER}"); 

이 코드

는 활성 창에 대한 검사 및 아마 모든 SendKeys 명령 전에 올바른 설정하여 나아져 할 수 있습니다. 이는 FindWindow()FindWindowEx()user32.dll으로 사용하여 수행 할 수 있습니다. 창 API의 이러한 메소드는 활성 창과 하위 창을 찾는 데 사용됩니다.

+0

당신은 놀라운 사람입니다! 멋진 트릭 :) – Abhishek

+0

내 컴퓨터의 모든 창을 닫을 때도 한 가지 문제가 발생합니다. 위의 코드는 찾아보기 팝업창의 실제 경로를 제공하지 않습니다. 처음부터 일부 문자가 생략됩니다. 예를 들어 "\ Test.txt"만 입력하고 "c :"부분은 무시할 수 있습니다. 내부적으로 다른 윈도우가 활성화되기 때문에 모든 것이 있습니까? – Abhishek

2

구현에 IE가 필요합니까? WebClient 클래스를 사용하면 POST 요청을 사용하여 파일을 업로드하는 것이 더 간단 할 수 있지만 양식이 업로드와 관련된 다른 게시물 작업을 제공하는지 여부에 따라 다릅니다. 그렇지 않은 경우 WebClient.UploadFile을 사용할 수 있습니다. WebClient.UploadFile and WebClient.UploadValues in the same call