我已成功自动化VBA Excel宏来迭代循环并点击一系列URL以触发服务器端脚本 - 这只需完成:
myIE.Navigate ("http://someURL.php?VARIABLE=" & var_string)
其中var_string
在迭代过程中在循环中分配。在此之前,我已经通过以下方式清除了缓存,cookie和历史记录:
Shell "RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess #
我尝试了许多#,包括8,2,1等等,看看是否有任何影响(以及#的组合)。
我遇到的问题是,虽然整个脚本SOMETIMES有效,但如果我再次运行它,我导航到URL的行无法调用URL,即使域/ URL是完全实时的功能。我手动输入IE窗口的任何其他URL工作正常 - 只是我在循环内调用的那个。 IE暂时将我锁定在该域之外。如果我在上次运行它几个小时后回到脚本,它通常会有效。
域再次起作用,脚本也很好 - 我一直用另一台机器验证它。
就好像我在环境中设置一些环境并破坏了VBA中的Internet Explorer,即使脚本非常简单。
我为myIE对象尝试了CreateObject()
,GetObject
和InternetExplorerMedium
。
答案 0 :(得分:1)
如果您只需要触摸"触摸"该副作用的URL,您也可以使用XMLHTTP
对象。在VBA中,转到菜单Tools,然后转到References并选择Microsoft XML,v6.0。然后:
Dim Request As New XMLHTTP
Request.open "GET", Url & "?VARIABLE=" & var_string, False
Request.send
' Check Request.status, probably for 200
一些注意事项:
var_string
的值,在本例中为URL编码True
的{{1}}第三个参数按照这些说明,这里有一个更详细的例子:
open
对于缺失的部分,这里the code for CXMLHTTPHandler
,我实际找到了through stackoverflow和a definition of UrlEncode at stackoverflow。
您应该专门针对您的需求Dim Request As New XMLHTTP
Request.open "POST", Url, True
Dim Handler As New CXMLHTTPHandler
Handler.Initialize Request
Set Request.onreadystatechange = Handler
Request.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
Request.send UrlEncode("VARIABLE") & "=" & UrlEncode(var_string)
' This returns immediately, the check must now be done in the Handler
,甚至可以让它接受CXMLHTTPHandler
过程并在实际的默认过程中调用它。 AddressOf
为m_xmlHttp
时,默认程序应将Nothing
设置为m_xmlHttp.readyState
。
编辑1:如果您的请求代码处于循环中,则需要将4
语句分成两部分,以确保您使用新对象:
Dim ... New