2009-12-07 82 views
0

我有一些“聪明”的用户编写了一个Excel电子表格,可以在我们的Intranet /时间表上自动执行他们的一些任务。看起来好像创建的Internet Explorer实例没有做我希望浏览器做的所有事情,例如设置cookie。有没有办法检测用户是否正在用Internet Explorer的VBA com对象实例访问网站?我无法阻止用户构建创造性解决方案,但我希望能够处理它们。 谢谢Excel VBA和InternetExplorer在网站上导致错误

+0

好问题 - 在查看解决方案时也不会有兴趣。 – ajdams 2009-12-07 19:40:12

+0

似乎如果我不控制VBA应用程序/电子表格,那么我无法设置User-Agent,并且我无法检测到它是由VBA生成的IE实例。我将不得不说服我的用户更改用户代理 – SWD 2010-01-28 04:49:13

回答

0

在您的服务器上,您可以尝试检查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" 

Altenatively,为什么不成立一个单独的访问URL只为您的Excel用户使用。或者创建一个简单的RESTFul API供他们使用。有可能做到这一点 - 尽量保持简单和易于维护。

您的“聪明”使用可以尝试在SO中发布问题 - 功能确实存在,比您的问题建议更好地自动化IE。

1

想到几件事情。首先,除非有人访问您不打算公开的受限信息或网页抓取数据,否则通常更好地纠正网站,使网站按预期运行,但用户仍然可以使用VBA访问网站。 VBA是许多企业的重要生产力工具,可以让人们灵活地“扩展”一个可能不适合开发需求的小众需求的网站。

但是,如果你坚持试图破坏你的用户的应用程序:)...检查DOM的Window.Visible属性。这并不是绝对必要的,但是很多网络爬虫只是在不可见的情况下“机器人化”Internet Explorer的一个实例。此外,它可能不是没有设置cookie,他们只是在飞行中被删除。如果您尝试使用cookie限制页面点击率,那么您应该考虑基本事实,即存储在客户端的任何数据都可能会发生变化。尝试存储服务器端的这种信息。如前所述,有些方法不会提交正确的标题,因此您可以检查这些标题,最后还有一种流行的“验证码”。当然,这些方法都不是傻瓜,它们都有一些缺点。所有这些说,如果有一件事我学到了,那就是人们会找到一种方法去做他们认为是他们的工作。您可以尽可能多地锁定界面,但如果用户认为他们所做的一切都是他们完成工作所必需的,他们会非常愿意为您应用的任何“修复”找到解决方法。他们甚至可能会为他们的努力赢得赞誉和认可。用户将继续这样做,直到你满足他们认为他们有的需求。

如果你真的想要杀死应用程序,最好是确定哪些需求没有得到满足,并满足它。如果不需要,经理们不希望拥有来支持和维护100个不同的小应用程序。如果需要满足需要的“合法”无障碍方式,通常会使用它。为什么?每个人都需要时间,所以最简单的解决方案会赢。如果你的应用比你想要的更好,那么为什么还要花费内部开发呢?如果有任何借口,一个业务部门经理会很快指导他们的员工恢复业务。

+0

我不是想“杀死”任何应用程序,我不限制页面点击次数。我甚至不想让他们无法构建这些东西。我甚至“赞美”他们。 VBA不能正确执行此操作。 – SWD 2009-12-08 13:48:24

+0

嗨SWD,根据他们的实施,它应该工作得很好。也许你可以发布他们正在使用的代码,我们可以帮助你调试它? – Oorang 2009-12-08 22:52:15

相关问题