ブラウザ上でJavaScriptを実行
2015 views
この記事では、ブラウザに開かれているWEBサイト上でJavaScriptを実行する方法について紹介します。
【できるようになること】
- InjectScriptアクションを利用
- InjectScriptで値を出力
- StoreValueの値をInjectScript内部で利用
Webページ上でJavaScriptを利用する場面
AUTOROでは、ブラウザ上でJavaScriptを実行することができます。
これにより、以下のようなことが実現できます。
・既存アクションで対応できない操作
・既存アクションと同等の操作を複数実行させ、1アクションに纏める
・複雑なHTTP Requestの送信
・テーブルデータの取得とスクリプトによる直接加工、値の出力
InjectScript
Webページ上でJavaScriptを実行するには、「InjectScript」アクションを利用します。
このアクションでは、既存のアクションでは実現できない操作を、JavaScriptで実行することができます。
ブラウザを操作
JavaScriptの実行結果を取得
InjectScriptでは、JavaScriptの実行結果をテキスト/配列/オブジェクトなどの値として取得することも可能です。
実行結果を値として取得する場合は、次の設定が必要になります。
- 「詳細設定の開閉」をクリックします。
- 「実行時の値を出力」をONに設定します。
取得される値は、JavaScriptコードの一番最後の行の実行結果を出力します。
※RunScriptアクションとは違い「return」は不要です。
StoreValueの変数を利用
InjectScriptでは、アクション内において、ワークフロー内のStoreValue(変数に保存)アクションで定義された変数の値を利用することが可能です。
以下より、値の利用方法を紹介します。
配列やオブジェクト型変数をInjectScript内部で利用する場合は、JavaScriptのメソッドを用いる必要があります。具体的には、以下のフォーマットで書き込む必要があります。
${JSON.stringify(StoreValueで定義した変数)};
※JSON.stringify()を使用していますが、値は配列/オブジェクトとなります。
※ダブルクォーテーションは不要です。
※要素に改行を含んでいても問題ありません。
# ブラウザを開く +open_browser_1: action>: OpenBrowser url: 'https://www.google.com/advanced_image_search' lang: 'ja-JP' headless: true # 変数に保存 オートロ株式会社 +store_value_1: action>: StoreValue key: companyName value: 'オートロ株式会社' # ページ内でJavaScriptを実行する_変数の値をテキストボックスに入力 +inject_script_1: action>: InjectScript browser: +open_browser_1 code: "document.querySelector(\"#xX4UFf\").value = \"${companyName}\";\n" returnValue: false # 要素のスクリーンショットを撮る +take_element_shot_1: action>: TakeElementShot browser: +open_browser_1 selector: form type: png ignoreError: false # テキストを作成 +text_1: action>: Text text: "改行のある\n文字列" # 変数に保存 +store_value_6: action>: StoreValue key: kaigyou value: +text_1 # ページ内でJavaScriptを実行する_改行のある文字列を出力 +inject_script_3: action>: InjectScript browser: +inject_script_1 code: '${JSON.stringify(kaigyou).split("\n")};' returnValue: true # 変数に保存_CSSセレクタ +store_value_3: action>: StoreValue key: selectors value: ["#CwYCWc","#mSoczb","#t2dX1c"] # 変数に保存_入力する文字列 +store_value_2: action>: StoreValue key: values value: ["R","P","A"] # ページ内でJavaScriptを実行する_配列関数で文字を入力 +inject_script_2: action>: InjectScript browser: +open_browser_1 code: "const inputValues = ${JSON.stringify(values)};\nconst selectors = ${JSON.stringify(selectors)};\n\nselectors.forEach((selector, i) => {\n document.querySelector(selector).value = inputValues[i];\n})\n" returnValue: false # 要素のスクリーンショットを撮る +take_element_shot_2: action>: TakeElementShot browser: +inject_script_2 selector: form type: png ignoreError: false # オブジェクトを作成 +create_object_1: action>: CreateObject object: testKey: "オブジェクト\nです" # 変数に保存 オブジェクト +store_value_5: action>: StoreValue key: obj value: +create_object_1 # ページ内でJavaScriptを実行する_Objectのキーの値を出力 +inject_script_5: action>: InjectScript browser: +open_browser_1 code: "const testObject = ${JSON.stringify(obj)};\ntestObject.testKey; //キーの値を出力" returnValue: true
[参考記事]
<InjectScript>ページ内でJavaScriptを実行
このページは役に立ちましたか?
サイトを見て解決しない場合はAUTOROにログインし、チャットよりお問い合わせください。