我在运行Google Apps脚本的Google协作平台页面上有一个链接。当我手动点击Firefox中的链接时,它工作正常。如何从HtmlUnit运行Google Apps脚本?
当我使用HtmlUnit进行相同操作时,一切似乎都正常。使用HtmlUnit,我可以登录(运行Google Apps脚本时必须登录),进入网页,确定链接并点击链接,但脚本无法运行。
代码的胆量很简单:
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
HtmlPage page = webClient.getPage("https://sites.google.com/site/mywebpage");
HtmlAnchor anchor = page.getAnchorByName("MyAnchor");
anchor.click();
所以缺什么,或者我做错了什么?
我创建的网页与原文链接:
<a href="/macros/sites?action=run&lib=094bahv51120b3d65&funcName=MyFunctionName" name="MyAnchor">Click here to run function</a>
在保存网页编辑,谷歌网站会自动把它改为:
<a href="#" name="MyAnchor" class="apps-script-run-link" id="ACiQKe2HyNeo..etc...01120b3d65#MyFunctionName">Click here to run function</a>
是click()
不工作,因为它的作用在现在只是“#”而不是链接定义的href属性上? 或者HtmlUnit对JavaScript(Mozilla Rhino)的语言支持是否不正确地执行Javascript来处理点击的链接(这意味着我需要用能够在Google Sites网页中识别Javascript的东西来替代Rhino)? 还是我犯的一些其他基本错误?
我迷路了,所以任何帮助非常感谢!
UPDATE
我跟着你的建议,罗德尼,发现问题并不注销谷歌网站。单击链接执行脚本后,使用HtmlUnit单击“注销”链接,使脚本运行正常。唯一的问题是它带来了以下错误(不停止脚本运行):
SEVERE: Job run failed with unexpected RuntimeException:
TypeError: Cannot set property "innerHTML" of null to "Finished script: Finished script MyFunctionName"
更新2
现在已经解决了这个概率了。没有足够的时间让脚本在完成注册之前完成。加上这个固定它:
webClient.waitForBackgroundJavaScriptStartingBefore(5000);
非常感谢您的帮助,罗德尼 - 和纳文的良好编辑!
是的,在Firefox中工作正常。但是我需要从正在执行的Java程序中触发Google Apps脚本的运行。 HtmlUnit允许您通过几个简单的调用来完成此操作。我可以使用Watir或IMacros做到这一点吗? – Marty 2011-06-06 23:33:53