代码之家  ›  专栏  ›  技术社区  ›  SWD

Excel VBA和InternetExplorer导致网站错误

  •  0
  • SWD  · 技术社区  · 16 年前

    我有一些“聪明”的用户,他们编写了excel电子表格,可以在我们的内部网/时间表上自动完成他们的一些任务。似乎创建的Internet Explorer实例并没有完成我期望浏览器完成的所有操作,例如设置cookie。有没有办法检测用户是否正在使用Internet Explorer的VBA com对象实例访问网站?我不能阻止用户创建创造性的解决方案,但我希望能够处理它们。 谢谢

    2 回复  |  直到 16 年前
        1
  •  1
  •   Oorang    16 年前

    我想到了几件事。首先,除非有人正在访问您不打算公开的受限信息或网络抓取数据,否则通常最好以网站按预期工作的方式更正网站,但用户仍然可以使用VBA访问网站。VBA是许多企业的重要生产力工具,可以让人们灵活地“扩展”网站,以满足可能不适合开发要求的利基需求。

    但是,如果你坚持要破坏用户的应用程序:)。。。检查DOM的窗口。有形财产。这还不确定,但很多web Scraper只是在无形中“机器人化”Internet Explorer的一个实例。而且,这可能不是因为没有设置cookies,而是因为cookies正在被动态删除。如果您试图用cookie限制页面命中,那么您应该考虑到存储在客户端的任何数据都会发生更改的基本事实。尝试将此类信息存储在服务器端。如前所述,一些方法没有提交正确的标题,因此您可以检查这些标题,最后还有一个非常流行的“验证码”。当然,这些方法都不是万无一失的,它们都有一些缺点。

    综上所述,如果说我学到了一件事,那就是人们会找到一种方法去做他们认为是他们工作的事情。你可以随心所欲地锁定你的界面,但如果用户认为他们所做的任何事情对他们的工作都是必要的,他们会非常积极地找到解决你申请的任何“修复”的方法。他们的努力甚至可能会赢得赞扬和认可。用户将继续这样做 直到你满足他们认为自己的需求 .

    如果你真的想终止应用程序,最好确定哪些需求没有得到满足,并满足它。经理们不想这么做 支持和维护100个不同的小应用程序(如果不需要的话)。如果有一种“合法的”无麻烦的方式来满足需求,通常会使用它。为什么?每个人都有时间紧迫感,所以最简单的解决方案获胜。如果你让你的应用程序比你试图撤销的应用程序更好,那么为什么还要费心内部开发呢?如果有借口,业务部门经理会很快指导员工重新开始工作。

        2
  •  0
  •   Andrew    16 年前

    在服务器上,可以尝试检查RequestHeader中的UserAgent字符串。这可以让你区分标准IE和Excel VBA,这取决于你的超级用户是如何做到的。您可以要求用户将他们发送的UserAgent字符串设置为已知值。

    例子:

    Dim oHTTP As WinHttp.WinHttpRequest
    Set oHTTP = New WinHttp.WinHttpRequest
    oHTTP.Open Method:="GET", url:="http://stackoverflow.com/", async:=False
    oHTTP.setRequestHeader "User-Agent", "ExcelVBA-UserApp"
    

    另外,为什么不设置一个单独的访问URL供excel用户使用呢。或者创建一个简单的 RESTFul API供他们使用。有很多方法可以做到这一点——尽量让它保持简单和易于维护。

    你的“聪明”用途可以尝试在SO中发布一个问题——这个功能确实存在,可以比你的问题所暗示的更好地自动化IE。