javascript - 如何从 HtmlUnit 运行 Google Apps 脚本?

标签 javascript java google-apps-script htmlunit google-sites

我在运行 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)? 还是我犯了其他一些基本错误?

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

更新

我听从了您的建议,Rodney,发现问题不在于退出 Google 站点。单击执行脚本的链接后,使用 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);

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

最佳答案

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

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

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

关于javascript - 如何从 HtmlUnit 运行 Google Apps 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6259093/

相关文章:

javascript - excel的html表格不显示英镑货币符号

java - CSV 日期到 arraylist_Java

javascript - 当外部源(firebase)更改单元格时,如何触发谷歌表格中的谷歌应用程序脚本?

javascript, 家庭作业, 表单验证, 致谢

javascript - 将重复的背景图像与容器底部的非重复图像对齐

java - 当用户单击主页按钮时终止 Activity

java - 使用字符串键和对象引用值创建映射

javascript - 从数组创建链接列表

json - 将 JSON 数据导入谷歌表格中的单个单元格

php - 以用户语言显示我的网站