2015-01-19 2 views
0

친구가 데이터를 추출 할 수있는 winform 앱을 개발하도록 요청 받았습니다. 나는 그것이 충분히 쉬울 것이라고 생각했다 - 내가 얼마나 틀린 지! 내 winform에는 웹 브라우저 컨트롤과 일부 버튼이 포함되어 있습니다. 웹 브라우저의 URL은 http://www.racingpost.com/greyhounds/card.sd이며 상상할 수있는 것처럼 그레이하운드 용 데이터를 가져올 곳입니다. 위의 페이지에서이 지역에는 경기 시간과 관련된 많은 링크가 있습니다. 이 중 하나를 클릭하면 해당 레이스와 내가 추출해야하는이 데이터가 표시됩니다. 그래서, 내 생각은 위의 링크에서 모든 링크를 가져온 다음 목록에 저장 한 다음 링크가있는 링크를 가져 와서 해당 위치로 이동하는 것이 었습니다. 일단 거기에, 나는 데이터를 추출하고 필요에 따라 저장할 수 있습니다.C# winforms webbrowser는 URL을 요청하지 않습니다.

그래서 첫 번째 인스턴스에서, 나는

//url = link above 
wb1.Url = new Uri(url); 

잡아에게 내가이 일단

이로 이동하기 위해 추가 버튼을 사용하여 (당일 각 종족에 대한 링크입니다) 데이터를 사용 특정 종족

wb1.Url = new Uri("http://www.racingpost.com/greyhounds/card.sd#resultday=2015-01-17&raceid=1344640"); 

그런 다음 한 번 거기에 다른 버튼을 클릭하여 데이터를 캡처 한 다음 위의 원래 링크로 돌아갑니다.

문제는 링크에있는 위치로 이동하지 않는다는 것입니다. 그러나 웹 브라우저에서 링크를 수동으로 클릭하면 아무런 문제가 없습니다.

나는 웹 브라우저의 속성을 살펴 봤는데 이것들은 모두 멋지다.

링크를 수동으로 시도하면 알 수 있습니다.하지만 코드를 통해 시도하면 문제가 없습니다. 나는 내가 코드에서 뭔가 잘못했다고 가정 할 수있다.

희망 사항 중 일부는 이해할 수 있습니다. 첫 번째 게시는 너무 복잡하기 때문에 사과드립니다. 나는 모든 코드를 아무 문제없이 제공 할 것이지만, '코드 포맷'으로 코드를 게시하는 방법을 알아낼 수없는 것 같습니까?

는 // 여기에

public partial class Form1 : Form 
{ 
    Uri _url; 
    public Form1() 
    { 
     InitializeComponent(); 
     wb1.Url = new Uri("http://www.racingpost.com/greyhounds/card.sd"); 
     wb1.Navigated +=new WebBrowserNavigatedEventHandler(wb1_Navigated); 
    } 
    classmodules.trackUrl tu; 
    private void btnGrabData_Click(object sender, EventArgs e) 
    { 

     classmodules.utility u = new classmodules.utility(); 
     rtb1.Text = u.GetWebData("http://www.racingpost.com/greyhounds/card.sd"); 
     HtmlDocument doc = wb1.Document; 
     string innerText = (((mshtml.HTMLDocument)(doc.DomDocument)).documentElement).outerHTML; 
     innerText = Regex.Replace(innerText, @"\r\n?|\n", ""); 
     rtb1.Text = innerText; 

     tu = new classmodules.trackUrl(); 
     u.splitOLs(ref tu, innerText); 
     classmodules.StaticUtils su = new classmodules.StaticUtils(); 
     su.SerializeObject(tu, typeof(classmodules.trackUrl)).Save(@"d:\dogsUTL.xml"); 
     classmodules.ExcelProcessor xl = new classmodules.ExcelProcessor(); 
     xl.createExcel(tu); 
    } 

    private void wb1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
     WebBrowser wb1 = sender as WebBrowser; 
     this.Text = wb1.Url.ToString(); 
    } 

    void wb1_Navigated(object sender, WebBrowserNavigatedEventArgs e) 
    { 
     _url = e.Url; 
    } 

    private void btnGoBack_Click(object sender, EventArgs e) 
    { 
     goBack(); 
    } 

    private void goBack() 
    { 
     wb1.Url = new Uri("http://www.racingpost.com/greyhounds/card.sd"); 
    } 

    private void btnGetRaceData_Click(object sender, EventArgs e) 
    { 
     HtmlDocument doc = wb1.Document; 
     string innerText = (((mshtml.HTMLDocument)(doc.DomDocument)).documentElement).outerHTML; 
     rtb2.Text = innerText; 
    } 

// ############################### 코드입니다

// 여기 URL이 들어가고 버튼을 클릭하여 웹 브라우저가 해당 위치로 이동하도록 지시합니다. 처음 // 카운터를 0에 추가 한 다음 목록에서 첫 번째 URL을 가져오고 // 카운터를 증가시킨 다음 버튼을 다시 클릭하면 urlNo가 1이 될 것이므로 두 번째 URL을 시도합니다 //

int urlNo = 0; 
    private void btnUseData_Click(object sender, EventArgs e) 
    { 
     if (tu.race.Count > urlNo) 
     { 
      string url = tu.race[urlNo].url; 
      wb1.Url = new Uri(url); 
      lblUrl.Text = url; 
      urlNo++; 
     } 
     else 
     { 
      lblUrl.Text = "No More"; 
     } 
    } 
+2

코드 게시! – Icemanind

+0

근근이 살아가고있는 웹 사이트의 [이용 약관] (http://www.racingpost.com/shared/help_info.sd?cat_id=26&subcat_id=69&headline=TERMSANDCONDITIONS)을주의 깊게 읽었습니까? 특히 긁기를 금지하는 것처럼 보이지는 않지만 "과도한 대역폭"조항이 있으며 사용자가 얻은 데이터를 사용할 수있는 방식에 매우 제한적이며 어떤 계정을 종료 할 수 있다는 내용의 조항이 있습니다 어떤 이유로 든 재량에 따라 –

+0

안녕하세요. Robert, 나는 부끄러운 일을 아무것도하지 않고 있습니다. 내가하고있는 일은 수동으로 할 수 있습니다. 링크를 클릭하고 필요한 데이터를 얻은 다음 다음 링크로 이동합니다. 그래서 저는이 과정을 가속화하기 위해 코드를 통해 이것을 달성하려고 노력하고 있습니다. 나는 그들과 아무런 관련이 없다. 구독료를 지불하면 프리미엄으로 데이터를 얻을 수있는 회원 섹션이 있습니다. 얻고 자하는 데이터는 프리미엄으로 간주되지 않습니다. – Mark

답변

0

탐색 (...) 메소드를 사용해 보셨습니까? 이론적으로 Navigate와 Url의 동작은 동일하지만 조금 다르게 동작한다고 추측 할 수 있습니다.

http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.navigate(v=vs.110).aspx

+0

안녕 루카스, 응답 주셔서 감사합니다. 나는 navigate 메소드를 시도해 보았고 정확히 동일했다. – Mark

+0

페이지에 Javascript 코드를 파싱하는 자동 탐색 기능이 거의 확실합니다. 그 가능성을 아직 보지 못했습니까? –

관련 문제