【问题标题】:How to download source code of website after having emulated a button click?模拟按钮点击后如何下载网站源代码?
【发布时间】:2014-07-21 21:01:50
【问题描述】:

使用 WebClient 我可以下载源代码。

WebClient.DownloadString(url);

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

WebBrowser.Document.GetElementById("commit").InvokeMember("click");

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

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

附:你可以猜到这个按钮是一个加载新元素的“查看更多”按钮,并且 url 一直保持不变,没有第 2 页。这就是我遇到问题的原因。

附: This 看起来像我的问题,但在我的情况下,它是同一页面,而不是新窗口

【问题讨论】:

  • 为什么不在像jQuery这样的框架中使用AJAX?
  • 我不知道你在说什么,我很无知,但我会做一些研究,谢谢。
  • @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;"你能从中得到什么吗?测试页面是this one。 (所有 Ask.fm 个人资料都是公开的,所以这不是问题)

标签: c# .net browser webclient


【解决方案1】:

让我告诉你,像这样一起使用WebBrowserWebClient 是没有意义的。 WebBrowser 不是 WebClient 的抽象或类似的东西,它们完全不同并且完全独立。

假设您想使用WebBrowser 解决此问题,您可以使用WebBrowser 组件下载页面源,如下所示:

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

【讨论】:

  • 我知道这是令人困惑和愚蠢的,但我不知道任何其他解决方案。我正在尝试您的解决方案。
  • 您的代码正在运行,但我发现它以某种方式触发了错误的按钮(相同的 ID?无论如何都是我的错),所以我尝试了另一种类似的方法,它成功了:The class option。谢谢您,您帮助我找到了解决方案。现在我有另一个问题,它不会工作两次!如果我将这些调用放在 clickButton 事件中,每次单击时它都会起作用,但如果我将它放在 for 循环中,它将不起作用。我尝试 Thread.Sleep(1000) 每个周期让它运行得更好,但它不起作用。
  • @Neflux 请将此答案标记为已接受的答案,如果它回答了 this 问题,然后问 another 问题(带有代码示例)与这个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-01
  • 1970-01-01
相关资源
最近更新 更多