c# winform text 换行webBrowser1.DocumentText获取网页源码不完整

昨天主管突然找我,说月底有个游戏要发新补丁,但是没有新增部分的资料,找到一个网站却不知道怎么下载到我们的数据库中.我看了一下,网页为了防抓取,都是用js来生成内容,不过还是让我找到具体位置,所有物品有3万多,需要的还要过滤,有用的只有3千多,人工来做几乎不太现实的,于是写了一个winform来抓它的信息来写到数据库中动作在DocumentCompleted事件中完成.
&&&&&&& private const string SQL_DATA = "select * from Table1";&&&&&&& private const string SQL_INSERT_1 = "insert into Table1 (WebID,Name,NeedLevel,Content) values (";&&&&&&& private const string Sql_INSERT_2 = ")";&&&&&&&private&void&webBrowser1_DocumentCompleted(object&sender,&WebBrowserDocumentCompletedEventArgs&e)&&&&&&&&{&&&&&&&&&&&&string&mydocument&=&webBrowser1.DocumentT&&&&&&&&&&&&//listBox1.Items.Add(mydocument);&&&&&&&&&&&&string&SQL_INSERT&=&string.E//取得页面中的物品等级&&&&&&&&&&&&int&mylevel&=&GetLevel(mydocument);//取得页面中物品名称&&&&&&&&&&&&string&myname&=&GetName(mydocument);&&&&&&&&&&&&if&(!string.IsNullOrEmpty(myname))&&&&&&&&&&&&{&&&&&&&&&&&&&&&&SQL_INSERT&=&SQL_INSERT_1&+&ID.ToString()&+&",'"&+&myname&+&"',"&+&mylevel&+&",'"&+&mydocument&+&"'"&+&Sql_INSERT_2;&&&&&&&&&&&&&&&&SqlConnection&cn&=&new&SqlConnection();&&&&&&&&&&&&&&&&cn.ConnectionString&=&SQL_CONNECTION;&&&&&&&&&&&&&&&&SqlCommand&sqlcmd&=&new&SqlCommand(SQL_INSERT,&cn);&&&&&&&&&&&&&&&&cn.Open();&&&&&&&&&&&&&&&&try&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&int&tmp&=&sqlcmd.ExecuteNonQuery();&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&catch&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&throw&new&Exception("no&good");&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&sqlcmd.Dispose();&&&&&&&&&&&&&&&&cn.Close();&&&&&&&&&&&&}&&&&&&&&}
&取得物品名称和等级:
&&&&&&&&private&string&GetName(string&mydocument)&&&&&&&&{&&&&&&&&&&&&if&(string.IsNullOrEmpty(mydocument))&return&string.E&&&&&&&&&&&&int&pos_start&=&mydocument.IndexOf(".html\"&",&0);&&&&&&&&&&&&if&(pos_start&==&-<span style="COLOR: #)&return&string.E&&&&&&&&&&&&int&pos_end&=&mydocument.IndexOf("&/a&&/div&",&<span style="COLOR: #);&&&&&&&&&&&&if&(pos_end&==&-<span style="COLOR: #)&return&string.E&&&&&&&&&&&&if&(pos_start&&=&pos_end)&return&string.E&&&&&&&&&&&&&string&name&=&string.E&&&&&&&&&&&&name&=&mydocument.Substring(pos_start&+&<span style="COLOR: #,&pos_end&-&pos_start&-&<span style="COLOR: #);&&&&&&&&&&&&return&&&&&&&&&}&&&&&&&&private&int&GetLevel(string&mydocument)&&&&&&&&{&&&&&&&&&&&&if&(string.IsNullOrEmpty(mydocument))return&<span style="COLOR: #;&&&&&&&&&&&&int&pos_start&=&mydocument.IndexOf("需要等级",&<span style="COLOR: #);&&&&&&&&&&&&if&(pos_start&==&-<span style="COLOR: #)&return&<span style="COLOR: #;&&&&&&&&&&&&int&pos_end&=&mydocument.IndexOf("&/div&",&pos_start);&&&&&&&&&&&&if&(pos_end&==&-<span style="COLOR: #)&return&<span style="COLOR: #;&&&&&&&&&&&&if&(pos_start&&=&pos_end)&return&&<span style="COLOR: #;&&&&&&&&&&&&string&Level&=&"<span style="COLOR: #";&&&&&&&&&&&&Level&=&mydocument.Substring(pos_start&+&<span style="COLOR: #,&pos_end&-&pos_start&-&<span style="COLOR: #);&&&&&&&&&&&&int&intleve&=&<span style="COLOR: #;&&&&&&&&&&&&try&&&&&&&&&&&&{&&&&&&&&&&&&&&&&intleve&=&Convert.ToInt32(Level);&&&&&&&&&&&&}&&&&&&&&&&&&catch&&&&&&&&&&&&{&&&&&&&&&&&&}&&&&&&&&&&&&finally&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&return&&&&&&&&&}
无法判断浏览器是否完成加载,所以用timer控件来完成:
&&&&&&&&private&const&int&START_ID&=&1;&&&&&&&&private&const&int&END_ID&=&4<span style="COLOR: #00;//<span style="COLOR: #999;&&&&&&&&private&static&int&ID&=&1;&&&&&&&&private&void&timer1_Tick(object&sender,&EventArgs&e)&&&&&&&&{&&&&&&&&&&&&if&(ID&&&END_ID&&&&!webBrowser1.IsBusy)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&ID&=&ID&+&<span style="COLOR: #;&&&&&&&&&&&&&&&&webBrowser1.Navigate("="&+&ID.ToString());&&&&&&&&&&&&&&&&//listBox1.Items.Add(ID.ToString()&+&webBrowser1.DocumentText);&&&&&&&&&&&&&&&&//InsertIntoDB(webBrowser1.DocumentText,&ID);&&&&&&&&&&&&&&&&textBox4.Text&=&ID.ToString();&&&&&&&&&&&&}&&&&&&&&}
timer的interval控制在1000ms,40000条数据用了11个多小时,从昨天晚上10点到今天早上,刚来的时候看到数据全都乖乖的在数据库呆着了.呵呵,搞定,交差...
阅读(...) 评论()声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载或引用的作品侵犯了您的权利,请通知我们,我们会及时删除! Powered by showbo,我用c# webbrowser模拟操作页面,加载页面后查看源代码,发现有两个源代码,请问我怎么在代-中国学网-中国IT综合门户网站
> 我用c# webbrowser模拟操作页面,加载页面后查看源代码,发现有两个源代码,请问我怎么在代
我用c# webbrowser模拟操作页面,加载页面后查看源代码,发现有两个源代码,请问我怎么在代
转载 编辑:李强
为了帮助网友解决“我用c# webbrowser模拟操作页”相关的问题,中国学网通过互联网对“我用c# webbrowser模拟操作页”相关的解决方案进行了整理,用户详细问题包括:发现有两个源代码?分数没多少,加载页面后查看源代码,请问我怎么在代码中操作指定的html我用c# webbrowser模拟操作页面,具体解决方案如下:解决方案1:你要操作指定的html是什么东东?两个源代码从哪里来?贴截图出来看看解决方案2:我现在手机上的没办法,就是一个页面,在页面上方查看源代码是一个其中包括版本信息什么的,在其他位置查看源代码,包括我需要操作的因为,我怎么分辨现在操作的是哪一个document解决方案3:你用什么查看的源代码?C#查看源代码:string s=webbrowser1.DocumentT解决方案4:我直接在webbrowser中右键鼠标解决方案5:我在登录页面只有一个源代码可以操作登录,登录后就是我要问的这个问题,页面中有两个区域的代码解决方案6:你要用C#的代码啊,不要用工具的方法 另外具体操作什么?发网址和要操作的元素私信给我解决方案7:稍等解决方案8:太给力了,你的回答完美地解决了我的问题,非常感谢!通过对数据库的索引,我们还为您准备了:问:怎么用C#的webBrowser模拟点击选中天猫页面上的类型标签?请高手指教 如...答:遍历元素,判断InnerText为“官方标配”,找到元素后,再模拟点击;===========================================问:我用c# webbrowser模拟操作页面,加载页面后查看源代码,发现有两个源代...答:你要操作指定的html是什么东东? 两个源代码从哪里来? 贴截图出来看看===========================================问:我在c# winForm 中使用了webbrowser控件,默认先跳转到A页面。 用winFro...答:通过地址判断 if (webBrowser1.Url.AbsoluteUri == "A页面网址") { } else if (webBrowser1.Url.AbsoluteUri == "B页面网址") { }===========================================问:请大家先听我说,之所以这么做,是因为有的网站在连接代码上加了很多J...答:我做过一个浏览器自带的QQ空间的账号密码赋值并登录,和你的问题原理大致一样。 首先你需要找到页面按钮或超链接的事件和ID,目的是触发事件和找到dom元素, 再通过webBrowser获得页面上的id,Document.getElementById(id),或者Document.All["ID...===========================================问:&li class="next"&&a href="/user_task?userid=(变数)&st=0&p=(变数)"&&...答:HtmlElementCollection link = this.webBrowser1.Document.GetElementsByTagName("a"); for (int ii = 0; ii & link.C ii++) { if (link[ii].GetAttribute("href").ToLower().IndexOf("/user_task?userid=") == 0 && link[ii].GetAttribute...===========================================问:能否给个webBrowser控制网页模拟人的操作。 顺序如下:打开给定网址,点...答:页面中有个 打开给定网址 document.getElementById("ifr").src="某个网址" 点击第六页: 假设是 第六页 var x = document.getElementById("ifr").getElementsByTagName("a"); for(var i=0;i===========================================问:&a href="/f?kw=%BB%AA%C4%CF%CA%A6%B7%B6%B4%F3%D1%A7&pn=50" class="n...答:直接根据InnerText属性找到“下一页”元素,然后再模拟点击; //引用 IHTMLDocument2 doc = WB1.Document.DomDocument as IHTMLDocument2; foreach (IHTMLElement ele in doc2.all) { if (ele.innerText == "下一页&") { bl_exist = ...===========================================问:这个是需要提交的三个信息,用户名、密码、验证码。以及登陆按钮。 priv...答:你要根据下一页的地址,来获取源代码 Login_DocumentCompleted: if(e.Url=="") { //你的登录代码 } else if(e.Url=="下一页的网页地址") { //string s=webBrowser1.DocuementT //源代码 }===========================================问:我做的是winform程序,要在后台自动输入网站的用户名和密码,并登陆到主...答:以前试过 好像没办法。ajax应该是等页面载入以后再执行。你可以循环解析源代码查看是否已经取得ajax部分的代码===========================================我明白你想做什么东西,webBrowser太费事,而且效率底,建议你考虑POST提交数据包方式,批量操作速度非常快,百度一下,代码很多=========================================== element.SetAttribute("value", "Hello"); 改为element.Style="Display:block"; element.SetAttribute("value", "ddfdgfdgfg");Div设置了display:none===========================================监听点击事件 获取url 然后用navigator 导航到新页面。 别忘记加e.cancle=true 否则你的ie会打开=========================================== 使用JS与Flash交互。===========================================1,最简单的,把excel存成xml,再操作 2,用office插件,添加个引用,然后就可以声明个Excel,然后就具体的不说了,手上没vs===========================================void aabb_KeyDown(boject sender,KeyEventArgs e)这样的函数)然后在该函数中写你要的操作就可以了。 比如我向一个textbox1添加这个事件,以用来捕获我在该textbox中按下...===========================================每次SendKeys.Send("{TAB}");后判断 webBrowser1.Document.ActiveElement.GetAttribute("href")=="连接地址" 则SendKeys.Send("{e...===========================================您好!我直接贴代码吧: WebBrowser加载完网页后有个事件,那时候可以获得内容网页正确的宽高. 1.为webbrowser控件添加该事件: wb.DocumentCompleted += new WebB...===========================================HtmlDocument doc = webBrowser1.D HtmlElement el = doc.GetElementById("下拉列表框的ID"); el.SetAttribute("selectedIndex", "1&qu...===========================================Document.getElementById(id),或者Document.All["ID"] 下面看一下我的操作: #region [ 页面填写表单 ] HtmlElement loginMode = _WebBrowser1.Document.All[&q...===========================================
本文欢迎转载,转载请注明:转载自中国学网: []
用户还关注
可能有帮助

我要回帖

更多关于 webbrowser 的文章

 

随机推荐