繁体   English   中英

如何从 HtmlUnit 运行 Google Apps 脚本?

[英]How to run Google Apps script from HtmlUnit?

我在运行 Google Apps 脚本的 Google 协作平台页面中有一个链接。 当我手动单击 Firefox 中的链接时,它工作正常。

当我使用 HtmlUnit 做同样的事情时,一切似乎都正常。 使用 HtmlUnit 我可以登录(运行 Google Apps 脚本时必须登录),进入 Web 页面,识别链接并单击它,但脚本没有运行。

代码的内容很简单:

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();

那么缺少什么,或者我做错了什么?

我在 Web 页面中创建了原始链接:

<a href="/macros/sites?action=run&lib=094bahv51120b3d65&funcName=MyFunctionName" name="MyAnchor">Click here to run function</a>

在保存 Web 页面编辑时,Google 协作平台自动将其更改为:

<a href="#" name="MyAnchor" class="apps-script-run-link" id="ACiQKe2HyNeo..etc...01120b3d65#MyFunctionName">Click here to run function</a>

click()是否不起作用,因为它作用于现在只是“#”而不是链接定义的 href 属性? Or does HtmlUnit's language support for JavaScript (Mozilla Rhino) not execute the Javascript correctly to process the clicked link (meaning that I need to replace Rhino with something that does recognised the Javascript in a Google Sites Web page)? 还是我犯了其他一些基本错误?

我迷路了,所以非常感谢任何帮助!

更新

我听从了你的建议,罗德尼,发现问题不在于退出 Google 网站。 单击链接执行脚本后,使用HtmlUnit单击“退出”链接,使脚本运行正常。 唯一的问题是它会引发以下错误(不会停止脚本运行):

严重:作业运行失败,出现意外的 RuntimeException:
TypeError:无法将 null 的属性“innerHTML”设置为“完成的脚本:完成的脚本 MyFunctionName”

更新 2

现在也解决了这个问题。 在继续注销之前,没有足够的时间让脚本完成。 添加此修复它:

webClient.waitForBackgroundJavaScriptStartingBefore(5000);

非常感谢您的帮助,Rodney - 以及 Naveen 的出色编辑!

HtmlUnit 有相当好的 Javascript 支持,所以我怀疑这是问题所在。

你怎么知道脚本没有运行? 或者更好的是,从 HtmlUnit 的角度来看,您如何知道脚本是否已成功运行? 当您单击 FF 中的链接时,您可能会看到发生了一些事情。 您依赖的是人类视觉和供人类使用的浏览器。 使用 HtmlUnit,您需要指示您的代码“看到”相同的结果,无论是通过检查后续 DOM 树,还是处理弹出窗口,或任何需要的。 有点思想上的转变。

你的脚本是做什么的? 操纵页面的内容? 打开对话框? 重定向到另一个页面? 有些事情 HtmlUnit 会自动处理,有些事情(比如打开对话框)需要定义处理程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM