2

GoogleAppsスクリプトを実行するリンクが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属性に作用するため、機能していませんか?または、JavaScript(Mozilla Rhino)に対するHtmlUnitの言語サポートは、クリックされたリンクを処理するためにJavascriptを正しく実行しません(つまり、RhinoをGoogleサイトのWebページでJavascriptを認識するものに置き換える必要があります)?または私が犯した他のいくつかの基本的な間違い?

私は迷子になっているので、どんな助けでも大歓迎です!

アップデート

私はあなたの提案、ロドニーに従いました、そして、問題がグーグルサイトからログオフしていないことを発見しました。リンクをクリックしてスクリプトを実行した後、HtmlUnitを使用して[サインアウト]リンクをクリックすると、スクリプトが正常に実行されます。唯一の問題は、次のエラーが発生することです(スクリプトの実行が停止しません)。

重大:予期しないRuntimeExceptionでジョブの実行が失敗しました:
TypeError:nullのプロパティ"innerHTML"を"Finished script:FinishedscriptMyFunctionName"に設定できません

更新2

この問題も解決しました。サインアウトに進む前に、スクリプトを完了するのに十分な時間がありませんでした。これを追加すると修正されました:

webClient.waitForBackgroundJavaScriptStartingBefore(5000);

あなたの助けに感謝します、ロドニー-そして良い編集のためのナビーン!

4

1 に答える 1

0

HtmlUnit はかなり優れた Javascript をサポートしているため、それが問題であるとは思えません。

スクリプトが実行されていないことをどのように確認できますか? または、HtmlUnit の観点から、スクリプトが正常に実行されたかどうかをどのように知ることができますか? FF でリンクをクリックすると、おそらく何かが起こるのがわかります。人間の視覚と、人間が使用するためのブラウザに依存しています。HtmlUnit を使用すると、後続の DOM ツリーを調べたり、ポップアップを処理したり、必要なことを行ったりして、同じ結果を「見る」ようにコードに指示する必要があります。ちょっとした発想の転換です。

あなたのスクリプトは何をしますか? ページのコンテンツを操作しますか? ダイアログを開きますか? 別のページにリダイレクトしますか? HtmlUnit が自動的に処理するものもあれば、(ダイアログを開くなど) ハンドラーを定義する必要があるものもあります。

于 2011-06-07T15:59:51.997 に答える