我在運行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