簡體   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