我使用的是C#Web客户端后登录详细信息页面和读取的所有结果。
我试图加载该页面包含闪光灯(其中,在浏览器中,转换成HTML)。 我猜这是闪光灯,以免被搜索引擎拿起???
我感兴趣的闪光灯只是在Firefox文本(不是图像/视频)等,当我“视图选择来源”实际上我看到的文本,HTML内,我希望看到的。
(有趣的是,当我查看整个页面的源我没有看到文本,HTML中,我想看到的。这会是什么关系?)
我已经张贴了我的登录信息后,目前,并加载HTML回来了,我看这不显示HTML闪光(我仿佛整个页面查看源)的页面。
提前致谢,
吉姆
PS:我要指出的是,POST实际工作,我登录成功。
菲德勒 (或类似工具)是非常宝贵的追查这样的屏幕抓取问题。 使用普通浏览器,并与小提琴手活跃,看着正在作出的所有请求,你去通过登录和导航过程中得到你想要的数据。 在此期间,你可能会看到一个或更多的东西,你的代码是做不同的服务器正在响应,因此您展示不同的HTML不是一个真正的客户。
(如“刮101”想起来了)下面的东西的列表是你要寻找什么。 下面的大多数东西可能是你已经在做的东西,但我包括一切的完整性。
为了有效地刮,你可能需要处理一个或多个以下:
- 饼干和/或隐藏字段。 当你在网站上的任何页面显示出来,你通常会得到它(在正常的浏览器)将传播到服务器上的所有后续请求会话cookie和/或隐藏表单域。 你可能还可以得到一个永久性的Cookie。 在许多网站,如果请求的不用(使用“Cookie会话”或表单字段网站)适当的cookie,网站将用户重定向到一个“没有饼干” UI,一个登录页面,或其他不希望的位置(从刮刀应用的角度来看)。 始终确保您捕获初始请求设置的cookie和忠实地将它们送回服务器上的后续请求,但如果这些后续请求中的一个改变一个cookie(在这种情况下传播而不是新的Cookie)。
- 认证令牌的上述一种特殊情况是表单的身份验证Cookie或隐藏字段。 确保你捕捉登录令牌(通常是一个cookie),并发送回。
- POST与GET这是显而易见的,但要确保你使用的是一个真正的浏览器做同样的HTTP方法。
- 表单字段(特别是隐藏的人!)我敢肯定你已经这样做了,但一定要发送一个真正的浏览器做了所有表单域,而不仅仅是可见的领域。 确保字段是正确HTML编码。
- HTTP标头。 你已经检查这一点,但它可能是有意义的只是再次检查,以确保(非cookie的)标题是相同的。 我总是开始使用完全相同的头,然后开始一个拔头一个,只保留了引起失败或返回虚假数据的请求的人。 这种方法简化你的代码刮。
- 重定向。 这些既可以来自于服务器或客户端脚本(例如,“如果用户没有Flash插件加载,重定向到一个非flash页”)。 见的WebRequest:如何查找使用的WebRequest对这个的ContentType = “应用程序/ xhtml + xml,文本/ XML的text / html;字符集= UTF-8”邮政编码? 对于如何重定向可以绊倒了屏幕刮板一个疯狂的例子。 请注意,如果你使用.NET刮,你需要使用HttpWebRequest的(不是Web客户端)重定向为依赖刮,因为默认情况下Web客户端不提供您的代码cookie和头连接到第二一种方式(重定向后)请求。 参见上面的线程的更多细节。
- 子请求(框架,AJAX,Flash等) -通常,页面元素(不是主要的HTTP请求)将最终获取要刮的数据。 你可以通过查看该HTTP响应包含了你想要的文字,然后向后工作,直到你在网页上找到什么是真正使该内容的请求摸不着头脑。 几个网站做的很疯狂的东西在子请求,比如通过AJAX请求压缩或加密的文本,然后使用客户端脚本来解密。 如果是这样的话,你需要做的更多的是有点像逆向工程的工作是什么客户端脚本正在做什么。
- 排序 -这一个是显而易见的:在做相同的顺序,一个浏览器客户端执行HTTP请求。 这并不意味着你需要让每一个请求(例如图像)。 通常,你只需要做出哪些返回text / html的内容类型的请求,除非你想要的数据是不是在HTML,是在Ajax /闪光灯/等。 请求。
(有趣的是,当我查看整个页面的源我没有看到文本,HTML中,我想看到的。这会是什么关系?)
这通常意味着差异在页面加载后,一些DOM操作通过JavaScript造成的。 请尝试关闭的JavaScript,看看它是什么样子。