获取webclient中通过AJAX生成的html

2024-02-12

我经常去某个网站查找资料。我心想:“等等。我可以编程。当我可以编写一个为我做这件事的软件时,为什么我要手动访问这个网站呢?”。

于是我开始了。我使用的是 C#,所以我找到了 WebClient 和 Uri。

我已经设法获取该网站的源代码,但出现的问题是,我正在查找的特定数据是在源代码加载后通过 AJAX 生成的。

这就是我的问题。如果需要首先通过 AJAX 调用请求该代码,我如何获取该代码?


一般的做法是这样的:

  1. 使用类似的工具Fiddler http://fiddlertool.com/,找出浏览器发出哪些 HTTP 请求以获取您要查找的数据。
  2. use 网络客户端 http://msdn.microsoft.com/en-us/library/system.net.webclient(VS.80).aspx获取您需要的 HTTP 请求。

看看我的回答这个问题 https://stackoverflow.com/questions/1471062/c-webclient-view-source-question/1521292#1521292有关 HTML 屏幕抓取的更多信息以及如何解决您可能遇到的各种问题。

对于上面的#1,以下是如何使用 fiddler 来了解特定请求是如何发出的:

首先,找到您关心的请求(在其响应中包含您想要的数据的请求)。您可以通过在 fiddler 的左窗格中双击每个请求并查看右下窗格中的“text fiew”选项卡来检查每个请求来完成此操作。您还可以使用 CTRL+F 在多个请求中查找内容,但某些请求会被压缩,因此如果您想确保可以发送文本,您需要确保在发出请求之前在工具栏中选择“自动解码”按钮 -搜索所有这些。

找到所需的请求后,在 Fiddler 中双击它,然后选择右上角窗格中的“标头”选项卡。这些是正在发送的标头。如果您的客户端将这些标头发送到服务器,您应该返回相同的数据。但通常并不需要所有标头,因此您需要弄清楚需要哪些标头。您可以使用右上方窗格中的 Fiddler 的 Request Builder 选项卡来执行此操作。选择该选项卡并将数据请求从左侧窗格拖到请求构建器上。然后提交请求以验证它是否返回正确的结果。然后开始删除标头,一次一个标头,直到请求停止工作 - 您知道该标头是必需的。尝试删除每个标头,直到找到所需的标头。

然后,您需要编写代码来生成正确的标头。不用担心Host:标头,这是自动为您生成的。为了Cookie:标头,您需要使用以下命令生成它CookieContainer班级。对于其他标头(例如 UserAgent:、Accept: 等,您通常可以复制它们并将它们按原样添加到您的请求中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取webclient中通过AJAX生成的html 的相关文章

随机推荐

  • 在playframework中拦截请求并检查授权

    我在用着play framework 2 4 2使用Java 我想通过拦截所有请求并检查是否设置了会话值来验证用户是否已登录 所以我延长了默认HttpRequestHandler https www playframework com do
  • 从 C#/.NET 调用 C++ 函数

    我有一个包含 C 项目和 C 项目的解决方案 C 项目定义了一个类 我想在 C 中实例化该类并调用其成员函数 到目前为止 我成功实例化了该类 CFoo Bar new CFoo 但是当我尝试调用它的函数时 编译器说它不可用 另外 当我检查调
  • 使用 Node.js 进行网页抓取时,我可以在页面上运行所有 JavaScript 吗? (即模拟真实的浏览器?)

    我正在尝试使用 Node js 进行一些网络抓取 使用jsdom 很容易加载 DOM 并将 JavaScript 注入其中 我想更进一步 运行从网页链接到的所有 JavaScript 然后检查生成的 DOM 包括元素的视觉属性 高度 宽度等
  • ng 服务:找不到模块“tapable”

    我刚刚将我的 Angular 5 项目从一台计算机转移到另一台计算机 在新设备中尝试时出现以下错误ng serve Cannot find module tapable Error Cannot find module tapable at
  • 如何在 Compact Framework 中将图像图标添加到标题栏并隐藏底部栏。?

    1 我想在表单标题中添加徽标 图像 我怎么做 2 在 Windows Phone 中 底部会出现一个带有键盘标志的栏 当我使用自定义键盘时 如何删除此栏 标题栏 可以通过删除 设置为空 表单的主菜单来 删除 底部栏 标题栏 顶部栏 无法轻松
  • vim:打开水平和垂直分割的4个文件

    在命令行上 vim可以打开4个水平分割的文件 vim o file1 file2 file3 file4 或 4 个文件垂直分割 vim O file1 file2 file3 file4 如何打开 4 个文件 使其水平和垂直分割 如下所示
  • 从数据库填充下拉列表

    我的实体框架中有一个 mvc 3 应用程序 其中有 2 个表 我有另一个名为 Product 的表 其中包含 ProductID 和 ProductName 创建新视图以插入新购买 如何将视图中的 ProductID 文本框更改为由 Pro
  • 导入库仅用于调试

    我在用stetho用于调试我的应用程序的lib Gradle debugCompile com facebook stetho stetho 1 4 1 debugCompile com uphyca stetho realm 2 0 0
  • 添加Java系统模块在Eclipse中编译

    我有一些遗留的 Java 代码 即 package org alo test j9 import javax activation DataHandler in java activation module import javax ann
  • SetWindowSubclass 内的 msftedit.dll RichEdit 控件出现“访问冲突读取位置 0x00000008”错误

    我在单独的子类文件中有编辑控件 在开始工作 SetWindowSubclass 函数后 我是 C 新手 之前我使用 SetWindowLongPtr 进行子类化 它工作得很好 但有人建议我开始使用 SetWindowSubclass 我遇到
  • Grails 渲染插件在部署时不会渲染图像

    我正在使用 grails 渲染插件生成 pdf 在开发过程中 我使用带 src 的标签将图像包含到服务器上的图像中 它工作正常 但部署应用程序后就不再工作了 图像就消失了 我正在通过模板进行渲染 因此当我在 gsp 中调用此模板时 这是可以
  • IQueryable 复杂顺序 $sort 中仅允许使用字段

    我想对列表进行排序 当它是IEnumerable时它工作正常 但是我将其更改为IQueryable来查询MongoDB时 它不起作用 给我这个错误 System NotSupportedException sort 中仅允许使用字段 Que
  • python3 super 不适用于 PyQt 类

    python3中有一个简单的程序 from PyQt4 import QtCore import PyQt4 class Bar object def init self print Bar start super Bar self ini
  • 如何从来宾操作系统获取 Citrix XenServer VM 的唯一 ID?

    假设我有多个同名的 Citrix XenServer VM 或者 这些名字都是垃圾 没关系 从其中一台虚拟机上的来宾操作系统中 我如何以编程方式确定虚拟机的 ID 我希望虚拟机的 UUID 应该作为来宾操作系统的 BIOS 序列号 但事实并
  • Typo3 流体图像裁剪,高度失败

    使用此代码
  • TouchJSON 返回可变对象吗?

    我从网络服务接收一些 json 我使用 TouchJSON 库解析它 我保留数据供用户更改某些值 然后我想将其返回到网络服务 我得到的 JSON 对象在对象中包含 NSDictionary 对象 如下所示 id null created a
  • 开源、多平台、基于浏览器的屏幕捕获扩展? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在考虑一个项目 该项目涉及浏览器用户能够屏幕捕获任何网页的内容 最好是整个页面 而不仅仅是可见部分
  • 为什么 cqlsh 右对齐字符串?

    我发现使用 cqlsh 显示的字符串值是右对齐的 是否有一个原因 有没有办法左对齐字符串 cqlsh test gt create table test id int a ascii t text primary key id cqlsh
  • 当其中一个容器失败时,SSIS 包是否失败

    我有一个包含 1 个容器的包 如果该容器失败 ssis 包是否会失败 该物业 失败时失败包 对于容器来说是 false 这是否意味着只有当该属性设置为 TRUE 时包才会失败 否则只有容器状态失败 而包状态不是 是的 如果序列容器失败 则整
  • 获取webclient中通过AJAX生成的html

    我经常去某个网站查找资料 我心想 等等 我可以编程 当我可以编写一个为我做这件事的软件时 为什么我要手动访问这个网站呢 于是我开始了 我使用的是 C 所以我找到了 WebClient 和 Uri 我已经设法获取该网站的源代码 但出现的问题是