[英]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.