我需要自动化一个涉及使用登录表单的网站的过程。我需要在登录页面之后的页面中捕获一些数据。
我知道如何筛选普通页面,但不知道如何筛选安全站点后面的页面。
- 这可以通过 .NET WebClient 类来完成吗?
- 我将如何自动登录?
- 我将如何保持登录其他页面?
我需要自动化一个涉及使用登录表单的网站的过程。我需要在登录页面之后的页面中捕获一些数据。
我知道如何筛选普通页面,但不知道如何筛选安全站点后面的页面。
一种方法是使浏览器自动化——您提到了 WebClient,所以我猜您可能指的是 .NET 中的 WebClient。
两个要点:
这是我要遵循的步骤:
在第 2 步中,我提到了一种用于自动登录的有点复杂的方法。通常,您可以使用用户名和密码直接发布到已知的登录表单操作,而无需获取初始表单或中继隐藏字段。一些站点在其表单上具有表单验证(不同于字段验证),这使得该方法不起作用。
HtmlAgilityPack是一个 .NET 库,它允许您将格式不正确的 html 转换为 XmlDocument,以便您可以对其进行 XPath。很有用。
最后,您可能会遇到表单依赖客户端脚本在提交之前更改表单值的情况。您可能需要模拟这种行为。
使用工具查看此类工作的 http 流量非常有帮助 - 我推荐ieHttpHeaders、Fiddler或FireBug(网络选项卡)。
您可以轻松模拟用户输入。您可以通过向网站发送 post\get 请求从您的程序提交网页上的表单。
典型的登录表单如下所示:
<form name="loginForm" method="post" Action="target_page.html">
<input type="Text" name="Username">
<input type="Password" name="Password">
</form>
您可以向提供用户名和密码字段值的网站发送发布请求。发送请求后会发生什么很大程度上取决于网站,通常您会被重定向到某个页面。您的授权信息将存储在 session\cookie 中。因此,如果您抓取客户端可以维护网络会话\理解 cookie,您将能够访问受保护的页面。
从您的问题中不清楚您将使用哪种语言\框架。例如,有一个用 perl 编写的屏幕抓取框架(包括登录功能) - WWW::Mechanize
请注意,如果您尝试登录的站点使用 java 脚本或某种验证码,您可能会遇到一些问题。
你能澄清一下吗?您所说的 WebClient 类是 HTTPUnit/Java 中的类吗?
如果是这样,您的会话应自动保存。
从您的问题中不清楚您指的是哪个 WebClient 类(或语言)。
如果有 Java 运行时,您可以使用 Apache HttpClient 类;这是我使用 Groovy 编写的一个示例,它通过 SSL 访问美味的 API:
def client = new HttpClient()
def credentials = new UsernamePasswordCredentials( "username", "password" )
def authScope = new AuthScope("api.del.icio.us", 443, AuthScope.ANY_REALM)
client.getState().setCredentials( authScope, credentials )
def url = "https://api.del.icio.us/v1/posts/get"
def method = new PostMethod( url )
method.addParameter( "tag", tag )
client.executeMethod( method )