2014-07-21 55 views
1

使用WebClient我可以下载源代码。如何在模拟按钮点击后下载网站的源代码?

WebClient.DownloadString(url);

使用WebBrowser,我可以模拟鼠标点击,通过Id获取HTML元素并调用它。

WebBrowser.Document.GetElementById(“commit”)。InvokeMember(“click”);

我的问题是:如何能够将这些混合到:

  1. 按下按钮(一次或多次,该ID保持不变)。
  2. 下载更新的源代码(点击按钮后)。

P.S.正如你可以猜到这个按钮是一个加载新元素的“查看更多”按钮,并且url始终保持不变,那么就没有第2页了。这就是为什么我有一个问题。

P.S. This看起来像我的问题,但在我的情况下,它是相同的页面,而不是一个新的窗口

+0

你为什么不只是使用AJAX在像jQuery框架? – MarioDS

+0

我不知道你在说什么,我很无知,但我会做一些研究,谢谢。 – Neflux

+0

@MDeSchaepmeester我没有搜索很多,但我发现按钮本身正在提交一个AJAX命令!这一个:“$ .ajax({complete:function(request){More.complete()},data:$。param($(this).serializeArray())+'&authenticity_token ='+ encodeURIComponent('ta55EgL5SY8W0B6ygmG0N6mgO2ueub40qa0xaj8c6Ok =' ),dataType:'script',type:'post',url:'/ AriannaLonghin/more'}); Forms.More.afterSubmit(); return false;“你能从中得到什么吗?测试页面是[这一个](http://ask.fm/AriannaLonghin)。 (所有Ask.fm配置文件都是公开的,所以这不是问题) – Neflux

回答

1

让我告诉你,这样结合使用WebBrowserWebClient是没有意义的。 WebBrowser不是WebClient或类似的东西的抽象,他们是完全不同,他们是完全分开的。

假设您想使用WebBrowser到persue这个问题,你可以使用WebBrowser组件,像这样下载页面的源代码:

webBrowser1.Document.GetElementById("commit").InvokeMember("click"); 
webBrowser1.DocumentCompleted += (o, args) => 
{ 
    string pageSource = webBrowser1.DocumentText; 
}; 
+0

我知道这是令人困惑和愚蠢的,但我不知道任何其他解决方案。我正在尝试您的解决方案。 – Neflux

+0

所有的好人。你有没有试过我提供的代码? –

+0

你的代码正在工作,但我发现它以某种方式触发了错误的按钮(无论如何都是相同的ID?我的错),所以我尝试了另一种类似的方式,它的工作原理:[The class option](http://stackoverflow.com /问题/ 5150610 /如何对模拟鼠标点击,用最web浏览器控制)。谢谢你,你帮我找到了解决办法。现在我有另一个问题,它不会工作两次!如果我将这些调用放入clickButton事件中,则每次点击都会起作用,但如果将其放入for循环中,它将不起作用。我试图在每个周期Thread.Sleep(1000),使其运行更好,但它不工作。 – Neflux