【问题标题】:Controlling web browser through C++通过 C++ 控制 Web 浏览器
【发布时间】:2016-09-18 11:24:38
【问题描述】:

我想编写一个可以使用特定网站的程序。我希望它能够识别相当琐碎的事物(文本)、点击链接和提交表单。

我希望服务器日志看起来与实际用户的活动没有什么不同,所以我不想像往常一样在浏览器之外进行操作。我希望像 javascript 这样的东西能够在页面上按预期运行,所以我不想只是伪造正在发送的用户代理。

我应该看什么来完成这个?它将在 Windows 中运行。如果我必须选择一个浏览器,那将是 Chrome,而 Firefox 作为我的第二选择。如果不是那么复杂,我希望它能够与 Chrome、Firefox、IE 和 Edge 一起使用,但只需选择 1 也可以。

我非常熟悉 C++,并且更愿意在这个项目中使用它。 (是的,我知道其他语言对于熟悉它们的人来说可能开发得更快,但这是我想要坚持的。)

我需要它能够在浏览器之外与数据库进行交互。我可以拥有一个能够进行进程间通信的浏览器插件来处理这个问题,或者拥有一个能够有效抓取浏览器并创建用户外观输入的完全外部程序。

【问题讨论】:

标签: c++ google-chrome firefox google-chrome-extension firefox-addon


【解决方案1】:

Selenium 似乎很适合你。它通常用于 webapps 的自动化测试,但它没有理由不能与任何站点交互。它可用于以完全自动化的方式驱动任何主要浏览器(不确定 Edge;我使用 Selenium 已经有一段时间了)。

Selenium 没有 C++ 绑定,但它有 Java、C#、Python、Ruby、PHP、Perl 和 Javascript 可以使用的绑定。

【讨论】:

    【解决方案2】:

    由于您使用 Windows,Microsoft 提供了用于模拟鼠标点击、位置和键盘的 api。

    VOID WINAPI mouse_event(
    _In_ DWORD     dwFlags,
    _In_ DWORD     dx,
    _In_ DWORD     dy,
    _In_ DWORD     dwData,
    _In_ ULONG_PTR dwExtraInfo
    );
    

    来自 User32.dll 和 winuser.h 的键盘

    VOID WINAPI keybd_event(
      _In_ BYTE      bVk,
      _In_ BYTE      bScan,
      _In_ DWORD     dwFlags,
      _In_ ULONG_PTR dwExtraInfo
    );
    

    这两个都已过时,但有替代品,它们的工作原理基本相同,但实现了安全级别机制。

    【讨论】:

    • 这么多不知情的意见,很痛苦。这些 API 调用的替代品是 SendInput。它与mouse_event/keybd_event 的区别在于可靠性而非安全性。更糟糕的是,伪造用户输入完全是错误的方法。 UI Automation 是自动化 UI 的正确方法。除非您正在处理 Internet Explorer。 IE提供了自己的automation interface。
    • 搞笑,请指出意见。鼠标事件和键盘事件不是意见,microsoft 的 api 会根据 ask-er 的要求发送真实的用户输入。请提供有关我在 msdn 文档中没有读到的可靠性改进的文档。这些 api 确实提供了服务器无法区分的真实用户输入。同样根据 msdn '此功能受 UIPI 约束。仅允许应用程序将输入注入到具有相同或更低完整性级别的应用程序中。我没有找到关于过时 api 的此类声明。
    • Reliability improvements: "这些事件不会与用户(使用键盘或鼠标)或通过调用 keybd_event、mouse_event 或其他调用 SendInput。” 输入进入 keybd_event 写入的同一个缓冲区。通过keybd_event 合成的输入同样受制于 UIPI。合成输入与真实输入是有区别的,例如使用低级鼠标/键盘挂钩。
    猜你喜欢
    • 1970-01-01
    • 2011-05-28
    • 2012-03-01
    • 1970-01-01
    • 2017-03-07
    • 2017-05-02
    • 2019-11-04
    • 2013-08-06
    • 1970-01-01
    相关资源
    最近更新 更多