2010-08-06 8 views
3

방금 ​​클릭을 시뮬레이션하기 위해 element.InvokeMember("click");이라고 말하면서 알 수 있습니다. elementHtmlElement입니다. 하지만 실제로 필요한 것은 새 창에서 링크를 여는 것이지만 기본 브라우저에서는 링크를 열지 않고 다른 프로그램에서는 WebBrowser을 작성합니다. 때로는 그냥 element.GetAttribute("href");을 호출하여 href 속성을 얻은 다음 반환 된 URL로 이동하지만 일부 까다로운 웹 페이지는 이러한 방식으로 작동하지 않습니다. 쿠키 및 세션과 관련이 있습니다.C# WebBrowser에서 "새 창에서 링크 열기"를 시뮬레이트하는 방법은 무엇입니까?

+0

좋습니다, 다른 방법으로 해결할 수 있습니다. 웹 브라우저의 콘텐츠를 복제 할 수 있다면 복제본의 링크를 따라갈 수 있습니다. 현재 URL을 새로 고침 할 수도 있지만 경우에 따라 지저분해질 수 있습니다. 모든 것을 같은 상태로 복제하는 방법이있을 수 있습니다. – Juan

답변

0

그냥 NewWindow2 이벤트를 처리 그것에 웹 브라우저가 폼/탭을 생성하고 새 창에서 요청의 대상으로 웹 브라우저 사용 : 예를 들어,이 dotBrowser에서 구현 않는 방법 참조 . 예를 들어 http://www.codeproject.com/KB/cpp/ExtendedWebBrowser.aspx을 확인하십시오.

1

System.Windows.Forms.WebBrowser은 매우 제한된 통제이며 가장 큰 문제점 중 하나입니다. 다중 탭핑을 지원합니다. 그것은 전혀 지원하지 않습니다.

정상적으로 작동 시키지만 충분한 성공을 거두지는 못했지만 제 3 자 제어를 사용해 보시기 바랍니다.

해결 방법 : 각 페이지의 <a> (또는 필요한 항목 중 일부)의 클릭 이벤트에 가입하고 새 창을 수동으로 만드십시오. , 12

foreach (HtmlElement tag in webBrowser.Document.All) 
{ 
    tag.Id = String.Empty; 
    switch (tag.TagName.ToUpper()) 
    { 
     case "A": 
     { 
      tag.MouseUp += new HtmlElementEventHandler(link_MouseUp); 
      break; 
     } 
    } 
} 

private void link_MouseUp(object sender, HtmlElementEventArgs e) 
{ 
    mshtml.HTMLAnchorElementClass a = (mshtml.HTMLAnchorElementClass)((HtmlElement)sender).DomElement; 
    switch (e.MouseButtonsPressed) 
    { 
     case MouseButtons.Left: 
     { 
      // open new tab 
      break; 
     } 
     case MouseButtons.Right: 
     { 
      // open context menu 
      break; 
     } 
    } 
} 
+0

그러나 실제로는 새 창에서 링크를 열 때 "// 새 탭 열기"행의 코드는 무엇입니까? – Juan

+0

@jsoldi : 위의 링크 # 2를 따르십시오. 귀하의 경우 - 문자열을 수락하는 생성자 (URL)를 사용하여 새 양식을 작성합니다. 그 양식은 새로운 WebBrowser를 만들고 그 URL로 이동합니다. – abatishchev

+0

글쎄, 그 문제는 일부 페이지에서 쿠키를 사용하고 그런 링크를 복사하여 새 창에서 열지 못하게하는 것입니다. 그게 내가 이베이에서 "다음"링크 (결과의 다음 페이지로 나를 보내 줄 링크)의 href를 복사 한 다음 새 창에서 그 페이지로 이동하면 항상 나를 착륙시킬 때까지 내가했던 일이다. 첫 페이지에. 이유는 모르겠다. 세션과 쿠키와 관련이 있다고 생각합니다. – Juan

관련 문제