C# httpwebrequest 和 javascript

IT技术 c# javascript ajax httpwebrequest
2021-03-20 09:59:56

我正在使用 C# HttpWebRequest 来获取网页的一些数据。问题是在页面加载后使用 javascript/ajax 更新了一些数据,但我没有在响应字符串中获取它。有没有办法让 webrequest 等到页面中的所有脚本都执行完毕?

谢谢

阿米特

6个回答

只是一个想法,但有一种方法可以让 .net 像在浏览器中一样加载网页:使用 System.Windows.Forms

您可以将网页加载到 WebBrowser 控件中

WebBrowser wb = new WebBrowser();
wb.ScrollBarsEnabled = false;
wb.ScriptErrorsSuppressed = true;
wb.Navigate(url);
while (wb.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); }
wb.Document.DomDocument.ToString()

这可能会为您提供 pre ajax DOM,但也许有一种方法可以让它先运行 ajax。

此外,以下内容有助于使该解决方案的线程版本正常工作。stackoverflow.com/questions/4269800/...
2021-04-30 09:59:56
您将需要添加对 System.Windows.Forms 的引用以访问 WebBrowser 类(如果您的项目中尚未引用它)。
2021-05-16 09:59:56

如果我正确解释了您的问题,那么您的问题没有简单的解决方案。

您正在从服务器抓取 HTML,并且由于您的 C# 代码不是真正的 Web 浏览器,因此它不会执行客户端脚本。

这样您就无法访问您获取的 HTML 不包含的信息。

编辑:我不知道来自原始网站的这些 AJAX 调用有多复杂,但您可以使用 Firebug 或 Fiddler for IE 查看请求是如何发出的,以便在您的 C# 应用程序中调用这些 AJAX 调用。所以你可以添加你需要的信息。但这只是一个理论上的解决方案。

我用理论解决方案编辑了我的问题......这取决于情况,页面多久更改一次......
2021-04-24 09:59:56
通常你会运行一个真正的浏览器并从 C# 自动化它。selenium网站
2021-04-28 09:59:56
我每 30 分钟检查一次数据。我想这就是我必须要做的,无赖!
2021-04-30 09:59:56

当您在 Web 浏览器中打开网页时,浏览器会执行 javascript 并下载该页面使用的其他资源(图像、脚本等)。HttpWebRequest 本身不会执行任何操作,它只会下载您请求的页面的 html。它永远不会自行执行任何 javascript/ajax 代码。

使用 HttpWebRequest 下载页面,以编程方式搜索相关 ajax 信息的源代码,然后使用新的 HttpWebRequest 拉取该数据。

HttpWebRequest 不模拟 Web 浏览器,它只是下载您指向它的资源。这意味着它不会执行甚至下载 JavaScript 文件。

您必须使用 FireBug 之类的东西来获取通过 JavaScript 拉入的数据的 URL,并将您的 HttpWebRequest 指向该 URL。

我想到了,但它不是一个 URL,它是一个数字,当我使用 http 请求时,数字所在的标签为空
2021-04-21 09:59:56
我有同样的想法。但我想这将是一个 PITA 保持该代码随着时间的推移工作......
2021-05-10 09:59:56
从我尝试的 30 分钟开始,这样做似乎一点也不简单。
2021-05-18 09:59:56