模拟Web浏览器以包装几个类似网站的功能

时间:2011-08-01 18:37:58

标签: c++ html-parsing web-crawler javascript interpreter

我对使用C ++模拟Web浏览器的功能感兴趣,这样我就可以为多个网站创建一个包装器。目前,这些网站最大的问题是他们大量使用与HTML DOM交互的JavaScript。因此,使用curl下载页面的简单解决方案以及RapidXML之类的解析其内容的方法已经完成。

接下来,我考虑使用curl这样的v8之类的东西,这解决了在页面上很好地解释JavaScript的问题。但是,它没有解决将HTML DOM方法与JavaScript连接的问题;换句话说,document.getElementById()将在v8中失败。

接下来,我考虑了WebKit,它似乎非常适合模拟网络浏览器 - 毕竟,Chromium和Safari都在其网络浏览器中使用它。但是,它有点太完整了。我不需要它包含的所有渲染方面。

所以,我正在寻找一些方法:

  1. 建立与网站的SSL连接
  2. 解释该网站上与HTML DOM相关的JavaScript
  3. 使用我的用户名和密码
  4. 设置用户名/密码<input>字段的值
  5. formSubmit()
  6. 调用<input type="button" onClick="formSubmit()">功能,模拟点击“提交”按钮
  7. 处理HTTP POST表单操作以及后续的HTTP 301和JavaScript重定向(使用window.location完成)
  8. 根据需要重复2-5
  9. 除了我已经考虑过的,我还有其他选择吗?理想情况下,我希望它非常轻量级,而不需要链接到许多库。

    我主要关注的是为Windows 7 64位开发。

1 个答案:

答案 0 :(得分:-1)

嗯,这听起来太像蛮力计划了。忽略这一点,并且由于您似乎不需要呈现任何网站,我认为您应该通过cURL或其他东西获取文件,然后解析它,通过使用正则表达式检查表单,检索表单操作,然后制作请求使用从<form>标记中获取的方法以及您想要的任何输入。

问题是,没有正确的方法可以知道您何时正确登录,除非您进行了某种站点检查。这主要是因为许多站点使用会话而不是直接cookie或HTTP身份验证,并且由于您无法直接从会话中读取,因此您无法猜测会话何时发生更改。

这是我现在能想到的最轻量级的解决方案。