问题描述
打开百度首页,逐一打开页面里的网页,使用了time控件,每隔一段时间点击,但运行效果并没有一一打开,而是一直在运行最后一个链接里的内容http://www.baidu.com/duty/请问这个是怎么回事,要怎么处理,麻烦提供下具体的代码。谢谢!!namespacewebbrowser点击{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidtextBox1_KeyDown(objectsender,KeyEventArgse){if(e.KeyCode==Keys.Enter){webBrowser1.Navigate(textBox1.Text);webBrowser1.ScriptErrorsSuppressed=true;}}privateboolzhuantia;privatevoidwebBrowser1_DocumentCompleted(objectsender,WebBrowserDocumentCompletedEventArgse){if(webBrowser1.ReadyState==WebBrowserReadyState.Complete){zhuantia=true;}else{zhuantia=false;}}privatevoidbutton1_Click(objectsender,EventArgse){timer1.Enabled=true;}privatevoidonClick(){if(zhuantia){HtmlElementCollectionlinks=webBrowser1.Document.GetElementsByTagName("A");foreach(HtmlElementlinkinlinks){link.InvokeMember("click");}}}privatevoidwebBrowser1_NewWindow(objectsender,CancelEventArgse){e.Cancel=true;}privatevoidtimer1_Tick(objectsender,EventArgse){onClick();}}}
解决方案
解决方案二:
foreach(HtmlElementlinkinlinks){link.InvokeMember("click");}还没等载入,你就打开下一个链接了。click下一个,要放到webBrowser1_DocumentCompleted中去。
解决方案三:
还有一个比较笨的办法就是做一个循环等待while(webBrowser1.Busy){Thread.Sleep(100);Application.DoEvents();}下面的代码
解决方案四:
解决方案五:
高手支招了
解决方案六:
引用1楼findcaiyzh的回复:
foreach(HtmlElementlinkinlinks){link.InvokeMember("click");}还没等载入,你就打开下一个链接了。click下一个,要放到webBrowser1_DocumentCompleted中去。
这个具体要怎么处理,可以给具体的代码吗,因为我对这个不太熟悉,在网上查了许多都没有找到解决的方法
解决方案七:
是不是获取A标签有问题呢,就是只点后面的链接,点击进去后,可以隔三秒点击一次。
解决方案八:
1.判断webbrowser加载完成2.获取webbrowser的所有连接你的那个获取方法没问题3.对你以获取到的连接进行各种你想要的操作HtmlElementCollectionlinks=webBrowser1.Document.GetElementsByTagName("A");这个就是集合了
解决方案九:
引用7楼Hsuifengershi的回复:
1.判断webbrowser加载完成2.获取webbrowser的所有连接你的那个获取方法没问题3.对你以获取到的连接进行各种你想要的操作HtmlElementCollectionlinks=webBrowser1.Document.GetElementsByTagName("A");这个就是集合了
现在他只能点击最后一个网页的链接,前面的新闻,贴吧这些都不会点击,不知道是不是加载没完成,我也做了状态判断好像也不行。
解决方案十:
namespacewebbrowser点击{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidtextBox1_KeyDown(objectsender,KeyEventArgse){if(e.KeyCode==Keys.Enter){webBrowser1.Navigate(textBox1.Text);webBrowser1.ScriptErrorsSuppressed=true;}}privateboolzhuantia;//判断加载状态!privatevoidwebBrowser1_DocumentCompleted(objectsender,WebBrowserDocumentCompletedEventArgse){if(webBrowser1.ReadyState==WebBrowserReadyState.Complete){zhuantia=true;}else{zhuantia=false;}}privatevoidbutton1_Click(objectsender,EventArgse){//计时器开始!timer1.Enabled=true;}privatevoidonClick(){//如果加载完成,获取页面的标签,并点击if(zhuantia){HtmlElementCollectionlinks=webBrowser1.Document.GetElementsByTagName("A");foreach(HtmlElementlinkinlinks){//如果加载忙,则继续等if(webBrowser1.IsBusy){MessageBox.Show("正在加载!");Thread.Sleep(1000);Application.DoEvents();}else{link.InvokeMember("click");}}}}privatevoidwebBrowser1_NewWindow(objectsender,CancelEventArgse){e.Cancel=true;}privatevoidtimer1_Tick(objectsender,EventArgse){onClick();}}}
求具体的解决代码。。
解决方案十一:
HtmlElementCollectionlinks=webBrowser1.Document.GetElementsByTagName("A");foreach(HtmlElementlinkinlinks){//如果加载忙,则继续等if(webBrowser1.IsBusy){MessageBox.Show("正在加载!");Thread.Sleep(1000);Application.DoEvents();}else{link.InvokeMember("click");}}
这块先不要click先做个list<sting>urls=newlist<string>();urls.add(url);等for循环跑完后这个页面所有的连接就在urls里面了然后你对urls进行操作不知道符合楼主的意思不
解决方案十二:
if(zhuantia)放在foreach里面。每一次循环(即打开每一个链接)都判断一下加载状态。
解决方案十三:
打开百度首页,逐一打开页面里的网页。是逐一点首页上的每个链接,还是某个点进去后再继续点里面的链接?是在百度域名下点链接逛,还是在从首页点进去后需要回到首页点下一个链接?
解决方案十四:
引用10楼Hsuifengershi的回复:
HtmlElementCollectionlinks=webBrowser1.Document.GetElementsByTagName("A");foreach(HtmlElementlinkinlinks){//如果加载忙,则继续等if(webBrowser1.IsBusy){MessageBox.Show("正在加载!");Thread.Sleep(1000);Application.DoEvents();}else{link.InvokeMember("click");}}这块先不要click先做个list<sting>urls=newlist<string>();urls.add(url);等for循环跑完后这个页面所有的连接就在urls里面了然后你对urls进行操作不知道符合楼主的意思不
这个最后还是要点击,还是有一个加载webbrowser的问题的好像呢。如果放到里list里,是不是还要构建网页标签才能使用click
解决方案十五:
引用12楼jason_mf的回复:
打开百度首页,逐一打开页面里的网页。是逐一点首页上的每个链接,还是某个点进去后再继续点里面的链接?是在百度域名下点链接逛,还是在从首页点进去后需要回到首页点下一个链接?
是在首页下面就点击上面的几个链接,每一个都打开加载这样子。
解决方案:
继续等!!!
解决方案:
你搞个textbox_keydown在哪里卡主zhuantia这个变量,然keydown事件需要自己出发,怎么运行?基本上timer没神马作用了。
解决方案:
我觉得onClick()应该放在DocumentComplete里面。定义一个全局List1〉页面加载完成就去所有Link,然后选一个,判断是否在List中,在则换一个link,点击(并将这个这个Link加入List,记录已点击过),进入二级页面。2〉等二级页面加载完,回到首页。3〉重复1〉
解决方案:
引用17楼jason_mf的回复:
我觉得onClick()应该放在DocumentComplete里面。定义一个全局List1〉页面加载完成就去所有Link,然后选一个,判断是否在List中,在则换一个link,点击(并将这个这个Link加入List,记录已点击过),进入二级页面。2〉等二级页面加载完,回到首页。3〉重复1〉
可以给具体的代码吗,因为不太熟悉这个,或者你方便的话我付费也可以