c++ - 模拟 Web 浏览器以包装多个类似网站的功能

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

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

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

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

所以,我会寻找一些方法来:

  1. 与网站建立 SSL 连接
  2. 解释该网站上与 HTML DOM 相关的 JavaScript
  3. 设置用户名/密码的值<input>包含我的用户名和密码的字段
  4. 通过调用 formSubmit() 模拟点击“提交”按钮函数,来自 <input type="button" onClick="formSubmit()">
  5. 处理 HTTP POST 表单操作和后续的 HTTP 301 和 JavaScript 重定向(使用 window.location 完成)
  6. 根据需要重复 2-5 次

除了我已经考虑过的,我还有哪些其他选择?理想情况下,我希望它非常轻便,不需要链接到许多库。

我主要关注针对 Windows 7 64 位的开发。

最佳答案

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

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

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

关于c++ - 模拟 Web 浏览器以包装多个类似网站的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6902799/

相关文章:

c++ - 是否有具有多访问方法的可变参数模板变体?

c# - 如何使用 HTML 敏捷包和 XPath 删除节点以清理 HTML 页面

php - 在 wordpress 站点中导航时网页内容有点移动

node.js - HTTP 代理错误状态码

SEO:爬虫是否理解 <a href=.. 永远不会被使用的链接?

javascript - 扫描 JavaScript 存在的工具?

c++ - 这种反转字符串的方式安全吗?

c++ - 如何在 C++ 中使用 .so 库与 Clion 和 Cmake?

c++ - 体系结构 x86_64 的 G++ undefined symbol

python - 如何从此标签中获取所有文本?