2012-09-01 4 views
3

CSV 다운로더 프로젝트를 진행 중입니다. 웹 페이지에서 생성 된 CSV 파일을 다운로드해야합니다. 및 HTML 민첩성을 사용하여, 나는 내 옆에서 모든 활동이없는WebBrowser 컨트롤 C# : 특정 링크를 찾아 프로그래밍 방식으로 "클릭"하시겠습니까?

<a href="/content/fo/contractvol/datafiles/OPTIDX_NIFTY_CE_31-08-2012_TO_31-08-2012.csv" target="_blank">Download file in csv format</a> 

지금 내가 원하는 csv 파일에 대한 링크를 포함 정확한 링크를 발견, 응용 프로그램이 웹 페이지에서 링크를 감지해야한다 (내가 그것을 할 수 Htmlagility에 의해) 웹 페이지가 완전히 내 웹 브라우저에서 내 앱에서 탐색되면 파일을 다운로드해야합니다. 내가 SO click here 게시물 중 하나에서 몇 가지 예제를 시도했지만 점점

오류 : 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.

HtmlElementCollection links = webBrowser.Document.GetElementsByTagName("A"); 

foreach (HtmlElement link in links) // this ex is given another SO post 
{ 
    if (link.InnerText.Equals("My Assigned")) 
     link.InvokeMember("Click"); 
} 

어떤 몸은 그것을 수행하는 방법을 제안 할 수 있습니다?

내가 HtmlElementCollection links = webBrowser1.Document.LinksHtmlElementCollection links = webBrowser.Document.GetElementsByTagName("A");로 변경하고

if (link.InnerText.Contains("My Assigned")) 
{ 
     link.InvokeMember("Click"); 
} 

을 사용 :

는 해결. 더 나은 해결책을 가진 사람은 누구일까요?

답변

1

innerText와 그렇게 널 (null)를 확인하기 위해, 안전 장치 구축 null이 될 수 있습니다

if ((link.InnerText != null) && (link.InnerText.Equals("My Assigned"))) 
     link.InvokeMember("Click"); 
+0

HtmlElementCollection으로 변경되었습니다. links = webBrowser.Document.GetElementsByTagName ("A"); HtmlElementCollection links = webBrowser1.Document.Links 그것이 작동했습니다. 나는 sthis 최고의 연습 ?? – Vishwa

+0

거의 GetElementsByTagname은 대소 문자를 구별한다고 생각할 것입니다. 링크는 대안이지만 [msdn doc] (http://msdn.microsoft.com/en-us/library/system.windows)에 명시된 바와 같이 앵커 (A)뿐만 아니라 링크 및 영역 태그도 제공합니다. .forms.htmldocument.links) 귀하의 경우에는 훌륭한 해결책입니다. – rene

+0

@Vishwa TagName은 TagId가 임의의 Tag의 ID 속성/속성을 참조하는 것처럼 특정 태그의 name 속성/속성을 참조합니다. name = "A"태그는 없을 가능성이 있으므로 객체 오류가 발생합니다. 내 대답을 확인하십시오. –

1

사실, 난 그것을 통해 HTMLAgility의 (그것의 아주 나쁜) 그냥 갈 팩/루프의 자신을 제거한다. 또한 예제를 기반으로 적어도 하나의 링크에 innertext가없는 것 같으므로 innerText를 사용하지 마십시오. .href 특성을 사용하고 .csv 확장명을 확인하십시오.

link.href.EndsWith(".csv") 

그리고 각 페이지에 둘 이상의 .cvs, 일부 URL 문자열하거나 수정하는 속성 InnerText을 찾아이있는 경우.

또한 .GetElementsByTagName ("A")가 작동하지 않는 이유는 TagName이 특정 TAG의 이름 속성을 참조하기 때문입니다. 그래서, 당신은 말했습니다, 모든 태그를 TagType name = "A"과 함께 사용하면 말이됩니까? 거기에 .GetElementsByTag [Type] 또는 TAG의 이름 속성이 아닌 태그 유형을 기본으로 사용할 수있는 태그가 있다고 생각합니다.

또한 .csv 파일을 어떻게 다운로드 하시겠습니까? "다운로드 대화 상자"가 나타나지 않습니까? 아니면 웹 브라우저 컨트롤에 사람들이 보이고 있습니까? (당신이 그 부분을 어떻게 처리했는지 궁금하다.)

+0

link.href가 전혀 작동하지 않으며 오류 'System.Windows.Forms.HtmlElement '에는'href '에 대한 정의가없고'System.Windows.Forms.HtmlElement '유형의 첫 번째 인수를 허용하는 확장 메서드'href '가 없습니다. – Vishwa

+0

@vishwa 이는 .href를 수행하려고하기 때문에입니다. 앵커 태그가 아닌 태그 : 즉, 루프에서 DIV 태그에있는 경우 .href를 수행 할 수 없으며 A 태그인지 확인해야하며 , 그것은 링크이기 때문에 HtmlElement를 사용하지 마십시오. 적절한 선언을 할 수 있습니다 (HtmlAnchorElement 또는 호출 된 이름, 정확한 이름을 기억할 수없는 경우 intellisense로 표시됨). –

관련 문제