我在运行 Google Apps 脚本的 Google 协作平台页面中有一个链接。当我手动单击 Firefox 中的链接时,它工作正常。
当我使用 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>
保存网页编辑后,Google 协作平台自动将其更改为:
<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 站点网页中的 Javascript 的东西替换 Rhino)?还是我犯了其他一些基本错误?
我迷路了,所以非常感谢任何帮助!
更新
我听从了你的建议,罗德尼,发现问题不在于退出 Google 网站。单击链接执行脚本后,使用HtmlUnit单击“退出”链接,使脚本运行正常。唯一的问题是它会引发以下错误(不会停止脚本运行):
严重:作业运行失败,出现意外的 RuntimeException:
TypeError:无法将 null 的属性“innerHTML”设置为“已完成的脚本:已完成的脚本 MyFunctionName”
更新 2
现在也解决了这个问题。在继续注销之前,没有足够的时间让脚本完成。添加此修复它:
webClient.waitForBackgroundJavaScriptStartingBefore(5000);
非常感谢您的帮助,Rodney - 以及 Naveen 的出色编辑!