🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

1回答

2582閲覧

PowerShellでGoogleフォームへ自動入力する方法

napoli

総合スコア0

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2021/02/02 03:01

編集2021/02/02 03:07

前提・実現したいこと

PowerShellでGoogleフォームを自動入力するためのスクリプトを作成したいです。

特定のフォームへ文字列で入力を行いたいのですが、下記エラーが発生しております。
PowerShellを利用するのは初めてで、プログラムを書いた経験も浅いため、例外発生時への対処方法についても知見がないので、調べながら徐々に対応を行っております。

現状、エラーで起こっている事象についても何が原因か理解が及んでいないため、自身で調べながらもご助言を頂きたいと思い投稿しました。

発生している問題・エラーメッセージ

エラー1 HRESULT からの例外:0x800A01B6 発生場所 行:1 文字:1 エラー2 null 配列にインデックスを付けることはできません。 発生場所 行:1 文字:1 + $txt[0].value = "test"

該当のソースコード

PowerShell

1$ie = New-Object -ComObject InternetExplorer.Application # IE起動 2 3$ie.Visible = $true 4$ie.Navigate("GoogleフォームURL") 5 6 7# ページが読み込まれるまで待機 8while ($ie.Busy -or $ie.readyState -ne 4) { 9 Start-Sleep -Milliseconds 100 10} 11$doc=$ie.Document 12 13# 文字入力 14$txt=$doc.getElementsByClassName("クラス名") 15$txt[0].value = "test" 16 17# ボタン押下 18$btn=$doc.getElementsByName("ボタン名") 19$btn[0].click() 20 21 22} 23$ie.Quit()

試したこと

現状、プログラムを書いた経験が浅く、例外に対する処理について対応策がわからず試していない状況です。

補足情報(FW/ツールのバージョンなど)

PowerShellのバージョン
5.1.18362.628
Windowsのバージョン
Windows10 1903(OS ビルド 18362.657)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2021/02/02 03:09

IE はもう使うのをやめましょう。少なくとも新規開発で選ぶようなものではありません。
haihaikazuma

2021/02/02 06:02

事象が再現しませんでした。 エラーは $txt が配列として定義されていないために発生していると思います。 $doc.getElementsByClassName("クラス名") のクラス名が誤っている可能性がありますが、 どのような値を入れておりますでしょうか。
napoli

2021/02/02 07:34

クラス名については、ChromeのデベロッパーツールにてGoogleフォームのエレメントを選択して以下のクラスを確認して代入しております。 div class="quantumWizTextinputPaperinputEl freebirdFormviewerComponentsQuestionTextShort freebirdFormviewerComponentsQuestionTextTextInput freebirdThemedInput modeLight"
haihaikazuma

2021/02/02 07:42 編集

回答ありがとうございます。少々思っていたものと違いました。 $doc.getElementsByClassName("gLFyf gsfi") このようにした場合うまくいきますでしょうか。
Zuishin

2021/02/02 07:55 編集

原因と対策は例外の番号 0x800A01B6 をググったらすぐみつかります。IE を使うなと言って無視する人はどうぞそのまま進めて痛い目に遭ってください。
napoli

2021/02/03 00:42

ご案内ありがとうございます。試してみます。 IEの利用はクローニング後すぐの端末で利用を考えており、今回の要件に盛り込まれているため利用しております。
napoli

2021/02/03 00:44

ちなみに、以下への書き換えは試しましたが解決せずでした。 getElementsByTagName -> IHTMLDocument3_getElementsByTagName getElementsByName -> IHTMLDocument3_getElementsByName getElementByID -> IHTMLDocument3_getElementByID
napoli

2021/02/03 00:47

$doc.getElementsByClassName("gLFyf gsfi") →こちらに変更して対応しましたが、状況は変わらず以下のエラーが発生しました。 このオブジェクトにプロパティ 'value' が見つかりません。プロパティが存在し、設定可能であることを確認してください。 発生場所 行:1 文字:1 + $txt[0].value = "test" + ~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) []、RuntimeException + FullyQualifiedErrorId : PropertyNotFound
Zuishin

2021/02/03 00:52

それだけじゃだめでしょうが、経験が浅いのに有償で地雷案件を引き受け、その上質問するにあたってろくにコミュニケーションもとれないのであれば苦労するのもやむなしですね。
napoli

2021/02/03 01:27 編集

あの、私の質問の質とコミュニケーション不足は多々至らず申し訳ございませんが、どんな優れた方であれ、状況把握せず建設的でないコメントは控えていただいてもよろしいでしょうか? 申し訳ございません。
Zuishin

2021/02/03 02:00

確かに建設的なコメントが耳に入らず余計なところにばかり反応する人のようなので言っても無駄ですね。これ以上この件に関してのコメントは不毛なので控えてください。
Zuishin

2021/02/03 02:02

あと、アカウントを次々取り替えての質問も迷惑なのでやめていただきたいと思います。正直うっとうしいです。この件に関しても不毛なコメントは控えてください。
napoli

2021/02/03 02:17

申し訳ありません。目的がそれました。。。 IE以外のChromeなどを用いた場合、PowerShellを用いた解決策などありましたらお恥ずかしですがご教授いただけますと幸いです。
guest

回答1

0

自己解決

こちらの件、PowerShellで必要な値を取得し、URLにパラメータをつけて最後に送信ボタンをクリックする処理を行うことで解決できました。

投稿2021/02/03 03:05

napoli

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問