用 webBrowser 获取页面信息的问题 用webBrowser控件在A页面中点击超链接后弹出B页面,如何实现在B页面获取信息,然后关闭B页面,回到A页面点击下一个超链接,再次获取B页面的信息。循环操作,直至取完信息为止。需要获取信息的网址:http://tool.httpcn.com/Zi/PinYin.html目的:获取对应拼音中的汉字麻烦高手门多多指点。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Microsoft.International.Converters.PinYinConverter 这个控件可能能帮到你 而不是靠网页抓取 这个我尝试过,我做出我需要的功能。但是公司现在想要一个比较完整的拼音库,我之前在网上抓取了三个拼音库,但是都不是很全,现在找到一个比较全的网站,想抓取。可是用之前的方法实现不了,以下是我抓取的方法; public partial class Form1 : Form { public static string LastUrl = ""; //上一次访问的URL public static string strClick = "a"; //当前点击的拼音 public static int page = 0; //当前页面(0为字母页面,1为汉字页面) public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //抓取数据的网址 webBrowser1.Url = new Uri("http://zidian.911cha.com/pinyin.html"); } private void button1_Click(object sender, EventArgs e) { HtmlDocument doc = webBrowser1.Document; //是否需要点击 bool isClick = false; //获取属性名称为超链接的内容 foreach (HtmlElement var in doc.GetElementsByTagName("A")) { string strtest = var.OuterHtml; //判断超链接的特征,符合就点击 if (var.OuterHtml.Contains("class=f14") && var.OuterHtml.Contains(".html\"")) { //如果为 True 则点击进入获取汉字页面 if (isClick) { var.InvokeMember("Click"); //访问该超链接 strClick = var.InnerHtml; break; } if (var.InnerHtml == strClick) { isClick = true; } else { isClick = false; } } } } private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { #region 防止多次调用 if (webBrowser1.ReadyState < WebBrowserReadyState.Complete || webBrowser1.Url.ToString() == LastUrl) return; LastUrl = webBrowser1.Url.ToString(); #endregion HtmlDocument doc = webBrowser1.Document; if (page == 0) { page = 1; this.button1_Click(sender, e); } else { //获取属性名称为超链接的内容 foreach (HtmlElement var in doc.GetElementsByTagName("A")) { //判断超链接的特征,符合就将数据插入数据库 if (var.OuterHtml.Contains("<A class=f14 title") && var.OuterHtml.Contains("html\" target=_blank")) { string strValue = var.InnerHtml; App_Code.Data.insertPy(strClick, strValue); //将抓取的汉字插入数据库 labelX1.Text = strClick; //用于显示当前抓取的拼音 } } //判断是否为最后一个拼音 if (strClick == "zuo") { MessageBox.Show("任务完成!"); return; } //返回上一页 webBrowser1.GoBack(); page = 0; } } } 如何用c#生成柱形百分比图? 关于try-catch-finally的用法 如何调用datagridview列控件的事件 我这个webservice是不是调用的有问题 动态生成CheckList,动态获取其值的问题 二维数组遍历 急啊!!!关于.net自带的安装部署工具中安装程序类的问题! 马上要用c#了,请给推荐一本入门的书! Dev中的GridControl怎么聚焦到一个单元格 “事件”的用法 WinForm 的线程问题!!!200分!求解答..... 咨询一下现在.net流行的代码混淆模式
public partial class Form1 : Form
{
public static string LastUrl = ""; //上一次访问的URL
public static string strClick = "a"; //当前点击的拼音
public static int page = 0; //当前页面(0为字母页面,1为汉字页面) public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
//抓取数据的网址
webBrowser1.Url = new Uri("http://zidian.911cha.com/pinyin.html");
} private void button1_Click(object sender, EventArgs e)
{
HtmlDocument doc = webBrowser1.Document;
//是否需要点击
bool isClick = false;
//获取属性名称为超链接的内容
foreach (HtmlElement var in doc.GetElementsByTagName("A"))
{
string strtest = var.OuterHtml;
//判断超链接的特征,符合就点击
if (var.OuterHtml.Contains("class=f14") && var.OuterHtml.Contains(".html\""))
{
//如果为 True 则点击进入获取汉字页面
if (isClick)
{
var.InvokeMember("Click"); //访问该超链接
strClick = var.InnerHtml;
break;
}
if (var.InnerHtml == strClick)
{
isClick = true;
}
else
{
isClick = false;
}
}
}
} private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
#region 防止多次调用
if (webBrowser1.ReadyState < WebBrowserReadyState.Complete || webBrowser1.Url.ToString() == LastUrl)
return;
LastUrl = webBrowser1.Url.ToString();
#endregion
HtmlDocument doc = webBrowser1.Document;
if (page == 0)
{
page = 1;
this.button1_Click(sender, e);
}
else
{
//获取属性名称为超链接的内容
foreach (HtmlElement var in doc.GetElementsByTagName("A"))
{
//判断超链接的特征,符合就将数据插入数据库
if (var.OuterHtml.Contains("<A class=f14 title") && var.OuterHtml.Contains("html\" target=_blank"))
{
string strValue = var.InnerHtml;
App_Code.Data.insertPy(strClick, strValue); //将抓取的汉字插入数据库
labelX1.Text = strClick; //用于显示当前抓取的拼音
}
}
//判断是否为最后一个拼音
if (strClick == "zuo")
{
MessageBox.Show("任务完成!");
return;
}
//返回上一页
webBrowser1.GoBack();
page = 0;
}
}
}