朋友要我开发一个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";
}
}
答案 0 :(得分:0)
您是否尝试过Navigate(...)方法?理论上,Navigate和Url的行为是相同的,但我可以推断它们的行为有点不同。
http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.navigate(v=vs.110).aspx