C#WebClient – 查看源代码问题

我正在使用C#WebClient将登录详细信息发布到页面并阅读所有结果.

我试图加载的页面包括flash(在浏览器中,它转换为HTML).我猜它是闪存避免被搜索引擎捡起来???

我感兴趣的flash只是文本(不是图像/视频)等,当我在firefox中“查看选择源”时,我确实在HTML中看到了我想看到的文本.

(有趣的是,当我查看整个页面的源代码时,我看不到HTML中的文本,我想看到.这可能是相关的吗?)

目前,在我发布了我的登录详细信息并将HTML加载回来之后,我看到了不显示Flash HTML的页面(就像我查看了整个页面的源代码一样).

提前致谢,

吉姆

PS:我应该指出POST实际上正在运行,我的登录成功.

Fiddler(或类似工具)非常有助于追踪像这样的屏幕抓取问题.使用普通浏览器并使用fiddler激活,查看在您完成登录和导航过程时所做的所有请求,以获取所需的数据.在这两者之间,您可能会看到一个或多个事物,您的代码正在以不同的方式执行服务器响应,因此显示的HTML与真实客户端不同.

下面的内容列表(将其视为“抓101”)是您想要寻找的.下面的大部分内容可能都是你已经在做的东西,但我把所有内容都包含在内.

为了有效地刮擦,您可能需要处理以下一项或多项:

>饼干和/或隐藏字段.当您出现在网站的任何页面上时,您通常会获得会话cookie和/或隐藏的表单字段(在正常浏览器中)将在所有后续请求中传播回服务器.您可能还会获得持久性cookie.在许多网站上,如果请求显示没有正确的cookie(或使用“无Cookie会话”的网站的表单字段),该网站会将用户重定向到“无cookie”UI,登录页面或其他不受欢迎的位置(来自刮刀应用程序的观点).始终确保捕获初始请求中设置的cookie,并在后续请求中忠实地将它们发送回服务器,除非其中一个后续请求更改cookie(在这种情况下传播新cookie).
>身份验证令牌上面的一个特例是表单 – 身份验证cookie或隐藏字段.确保你正在捕获登录令牌(通常是一个cookie)并将其发回.
> POST与GET这很明显,但请确保您使用的是与真实浏览器相同的HTTP方法.
>表单字段(特别是隐藏的字段!)我确定你已经这样做了,但确保发送真实浏览器所做的所有表单字段,而不仅仅是可见字段.确保字段是正确的HTML编码.
> HTTP标头.你已经检查了这个,但是再次检查可能是有意义的,只是为了确保(非cookie)标题是相同的.我总是从完全相同的标题开始,然后开始逐个拔出标题,并且只保留导致请求失败或返回伪造数据的标题.这种方法简化了您的抓取代码.
>重定向.这些可以来自服务器,也可以来自客户端脚本(例如“如果用户没有加载Flash插件,则重定向到非Flash页面”).有关重定向如何绊倒屏幕刮板的疯狂示例,请参阅WebRequest: How to find a postal code using a WebRequest against this ContentType=”application/xhtml+xml, text/xml, text/html; charset=utf-8″?.请注意,如果您使用.NET进行抓取,则需要使用HttpWebRequest(而非WebClient)进行与重定向相关的抓取,因为默认情况下,WebClient不会为您的代码提供将cookie和标头附加到第二个的方法(重定向后)请求.有关详细信息,请参阅上面的主题.
>子请求(帧,ajax,flash等) – 通常,页面元素(不是主HTTP请求)将最终获取您想要抓取的数据.你可以通过查看哪个HTTP响应包含你想要的文本来解决这个问题,然后向后工作直到你发现页面上的内容实际上是在发出对该内容的请求.一些网站在子请求中做了很多疯狂的事情,比如通过ajax请求压缩或加密的文本,然后使用客户端脚本来解密它.如果是这种情况,您需要做一些更多的工作,比如逆向工程客户端脚本正在做什么.
>排序 – 这一点很明显:以与浏览器客户端相同的顺序发出HTTP请求.这并不意味着您需要提出每个请求(例如图像).通常,您只需要发出返回text / html内容类型的请求,除非您想要的数据不在HTML中并且位于ajax / flash / etc中.请求.

https://stackoverflow.com/questions/1471062/c-sharp-webclient-view-source-question

转载注明原文:C#WebClient – 查看源代码问题