C#winforms webbrowser不会被网友要求

时间:2015-01-19 17:07:45

标签: c# winforms

朋友要我开发一个winform应用程序,以便能够提取数据。我觉得这很容易 - 我有多错! 在我的winform中,我已经包含了一个webbrowser控件和一些按钮。 Web浏览器的URL为http://www.racingpost.com/greyhounds/card.sd,您可以想象,它是获取灰狗数据的地方。当在上面的页面上时,该区域内有许多特定于比赛时间的链接。如果你单击其中任何一个,它会带你到那个种族,以及我需要提取的这个数据。因此,我最初的想法是从上面的链接中获取所有链接,然后将它们存储在列表中,然后只需一个按钮可以接收它的任何链接,然后将webbrowser带到该位置。到那里之后,我可以查看提取数据并根据需要存储它。

所以,在第一个例子中,我使用

//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");

然后,在那里,单击另一个按钮捕获数据,然后返回上面的原始链接。

问题是,它不会转到链接中的位置。但是,如果我在webbrowser中手动点击链接,那就没问题了。

我已经查看了webbrowser的属性,这些看起来都很好 - 虽然我不能证明这一点!

我知道如果我尝试手动转到链接,我可以,但如果我尝试通过代码执行,它就不会让步。我只能假设我在代码中做错了。

希望其中一些有意义 - 首先发帖,如果我弄得一团糟,那就道歉了。我将提供所有代码没有问题,但似乎无法弄清楚如何以代码格式发布代码'?

//这是代码

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的点,然后单击按钮//指示webbrowser转到该位置。我将一个初始//计数器添加到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";
        }
    }

1 个答案:

答案 0 :(得分:0)

您是否尝试过Navigate(...)方法?理论上,Navigate和Url的行为是相同的,但我可以推断它们的行为有点不同。

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