ウェブ関連#

ブラウザ操作#

破壊的変更が行われました

バージョン 0.11.0 以降のブラウザ操作機能はバージョン 0.10.2 以前とは互換性がありません

ブラウザパスの指定方法

通常はレジストリ等からブラウザの実行ファイルのパスを取得しそれを実行します (パスの自動取得)
自動取得を行わずに任意のパスで実行させるには設定ファイルにパスを記述します
{
    "browser": {
        "chrome": "C:\\path\\to\\chrome.exe",
        "msedge": "C:\\path\\to\\msedge.exe"
    },
}
自動取得に戻す場合は null にします
{
    "browser": {
        "chrome": null,
        "msedge": null
    },
}
パスは必ずchrome.exeおよびmsedge.exeのものにしてください
それ以外は動作保証外です
BrowserControl(ブラウザ定数[, ポート=9222])#
Devtools Protocolを利用したブラウザ操作を行うための Browserオブジェクト を返します
デバッグポートを開いたブラウザを起動します
対応ブラウザは以下
  • Google Chrome

  • Microsoft Edge

パラメータ:
  • ブラウザ定数 (定数) --

    以下のいずれかを指定

    BC_CHROME

    Google Chromeを操作します

    BC_MSEDGE

    Microsoft Edgeを操作します

  • ポート (数値 省略可) -- デバッグポートを指定する

戻り値の型:

Browserオブジェクト

戻り値:

対象ブラウザの Browserオブジェクト

ブラウザへの再接続について

対象ブラウザが同じデバッグポートを開けて起動している場合はそのブラウザに再接続できます
異なるポートを開いている、またはポートが開かれていない場合は再接続できずエラーになります
// 起動.uws

chrome = BrowserControl(BC_CHROME, 9999) // ポート9999でChromeを起動
chrome[0].navigate("https://example.com") // 0番目のタブで任意のサイトを開く
// 再接続.uws

chrome = BrowserControl(BC_CHROME, 9999) // 9999ポートのChromeに再接続される
url = chrome[0].document.URL // 0番目のタブのURLを取得
print url // https://example.com

起動中のブラウザとは別に自動操作用のブラウザを起ち上げるには

起動中のブラウザとは異なるプロファイルで新たなブラウザを起動する必要があります
このような場合はBrowserControl関数ではなく Browserbuilder 関数 を使用してください
Browserbuilder 関数が返す BrowserBuilderオブジェクト でプロファイルフォルダを指定します
Browserbuilder(ブラウザ定数)#
最低限の設定でブラウザを起動する BrowserControl 関数とは異なり BrowserBuilderオブジェクト を介して様々な設定が行なえます
パラメータ:

ブラウザ定数 (定数) --

以下のいずれかを指定

BC_CHROME

Google Chromeを操作します

BC_MSEDGE

Microsoft Edgeを操作します

戻り値の型:

BrowserBuilderオブジェクト

戻り値:

対象ブラウザの BrowserBuilderオブジェクト

ブラウザの起動方法

BrowserBuilderオブジェクトstart() メソッドでブラウザを起動、または再接続します
// BrowserBuilderオブジェクトを作成し、startメソッドを呼ぶ
builder = BrowserBuilder(BC_CHROME)
chrome = builder.start()

// 以下のようにも書ける
chrome = BrowserBuilder(BC_CHROME).start()

// ポートの変更
chrome = BrowserBuilder(BC_CHROME)_
    .port(9999)_
    .start()

// ヘッドレス起動
chrome = BrowserBuilder(BC_CHROME)_
    .headless(TRUE)_
    .start()

// プロファイルフォルダの変更
chrome = BrowserBuilder(BC_CHROME)_
    .profile("C:\uwscr\chrome\profile1")_
    .start()

// 複合設定
chrome = BrowserBuilder(BC_CHROME)_
    .port(12345)_
    .headless(TRUE)_
    .start()

対象ブラウザが指定ポートを開いていなかった場合の動作

  • 対象ブラウザのプロセスがすでに存在している

  • そのプロセスが指定ポートを開いていない

の2点を満たす場合、再接続が行えないためエラーになります
ただし、起動中のブラウザとは異なるプロファイルフォルダを指定した場合は指定ポートで新たなブラウザプロセスを起動します
(同一プロファイルにつき一つのデバッグポート(またはポートなし)でしかブラウザを起動できないため)
RemoteObjectType(remote)#
RemoteObject の型を返します
型名の他に可能であれば以下を含みます
  • 型の詳細

  • クラス名

パラメータ:

remote (RemoteObject) -- 型情報を得たい RemoteObject

戻り値の型:

文字列

戻り値:

型の情報を示す文字列

IE関数互換#

IEGETDATA互換#

BRGetData(タブ, name[, value=EMPTY, n番目=1])#
エレメントのnameとvalue属性をもとに値を取得する
パラメータ:
  • タブ (TabWindowオブジェクト) -- 値を取りたいページのタブを示す TabWindowオブジェクト

  • name (文字列) -- 値を取得するエレメントのname属性

  • value (文字列 省略可) -- nameが同一の場合にvalue属性の値を指定

  • n番目 (数値 省略可) -- nameもvalueも一致する場合順番を1から指定

戻り値:

取得された値、取得できない場合はEMPTY

BRGetData(タブ, タグ指定[, n番目=1])
エレメントのタグ名と順番を指定して値を取得する
パラメータ:
  • タブ (TabWindowオブジェクト) -- 値を取りたいページのタブを示す TabWindowオブジェクト

  • タグ指定 (文字列) -- "TAG=タグ名" でタグ指定モードになる

  • n番目 (数値 省略可) -- 該当タグの順番を1から指定

戻り値:

取得された値、取得できない場合はEMPTY

BRGetData(タブ, タグ指定, プロパティ指定[, n番目=1])
エレメントのタグ名とプロパティを指定して値を取得する
パラメータ:
  • タブ (TabWindowオブジェクト) -- 値を取りたいページのタブを示す TabWindowオブジェクト

  • タグ指定 (文字列) -- "TAG=タグ名" でタグ指定モードになる

  • プロパティ指定 (文字列 省略可) -- "プロパティ名=値" を指定可("id=hoge" など)、プロパティ名のみ大文字小文字の一致が必須

  • n番目 (数値 省略可) -- タグもプロパティも一致する場合順番を1から指定

戻り値:

取得された値、取得できない場合はEMPTY

プロパティ指定について

UWSCとは異なりID, className, innerText, innerHTML以外のプロパティも指定できます
ただし、プロパティ名は大文字小文字が一致する必要があります(case sensitive)
プロパティの値は大文字小文字を無視しますが、完全一致する必要があります
BRGetData(タブ, "TAG=TABLE"[, n番目=1, 行=1, 列=1])
テーブルエレメントの座標を指定して値を取得する
パラメータ:
  • タブ (TabWindowオブジェクト) -- 値を取りたいページのタブを示す TabWindowオブジェクト

  • "TAG=TABLE" (文字列) -- "TAG=TABLE" を指定(固定)

  • n番目 (数値 省略可) -- テーブルの順番を1から指定

  • (数値 省略可) -- テーブルの行番号を1から指定

  • (数値 省略可) -- テーブルの列番号を1から指定

戻り値:

取得された値、取得できない場合はEMPTY

IESETDATA互換#

BRSetData(タブ, , name[, value=EMPTY, n番目=1, 直接入力=FALSE])#
テキストボックス等に文字列を入力する
キー入力をエミュレートします
input[type="file"] 要素に対してはファイルパスを設定します
パラメータ:
  • タブ (TabWindowオブジェクト) -- 値を取りたいページのタブを示す TabWindowオブジェクト

  • (文字列) -- 入力したい値、ファイルパス複数登録の場合は文字列配列も可

  • name (文字列) -- 値を変更するエレメントのname属性

  • value (文字列 省略可) -- 同一nameのエレメントがある場合にvalue値を指定

  • n番目 (数値 省略可) -- nameとvalueが一致する場合に順番を1から指定

  • 直接入力 (真偽値 省略可) -- 直接valueプロパティを変更する場合はTRUE

戻り値の型:

真偽値

戻り値:

成功時TRUE

BRSetData(RemoteObject, )
テキストボックス等に文字列を入力する
キー入力をエミュレートします
input[type="file"] 要素に対してはファイルパスを設定します
パラメータ:
  • タブ (RemoteObject) -- 入力したいエレメントを示す RemoteObject

  • (文字列) -- 入力したい値、ファイルパス複数登録の場合は文字列配列も可

戻り値の型:

真偽値

戻り値:

成功時TRUE

browser = BrowserControl(BC_CHROME)
tab = browser[0]

file = tab.querySelector("input[type=file]")
files = ['C:\test\hoge.txt', 'C:\test\fuga.txt']
print BRSetData(file, files)
BRSetData(タブ, TRUE, name[, value=EMPTY, n番目=1])
nameにより指定したエレメントをクリックします
パラメータ:
  • タブ (TabWindowオブジェクト) -- 値を取りたいページのタブを示す TabWindowオブジェクト

  • TRUE (真偽値) -- TRUEを指定 (固定)

  • name (文字列) -- クリックするエレメントのname属性

  • value (文字列 省略可) -- 同一nameのエレメントがある場合にvalue値を指定

  • n番目 (数値 省略可) -- nameとvalueが一致する場合に順番を1から指定

戻り値の型:

真偽値

戻り値:

成功時TRUE

BRSetData(タブ, TRUE, タグ指定[, n番目=1])
タグ名と順番により指定したエレメントをクリックします
パラメータ:
  • タブ (TabWindowオブジェクト) -- 値を取りたいページのタブを示す TabWindowオブジェクト

  • TRUE (真偽値) -- TRUEを指定 (固定)

  • タグ指定 (文字列) -- "TAG=タグ名" でダグ指定モードになる

  • n番目 (数値 省略可) -- タグ名が一致する場合に順番を1から指定

戻り値の型:

真偽値

戻り値:

成功時TRUE

BRSetData(タブ, TRUE, タグ指定, プロパティ指定[, n番目=1])
タグ名とプロパティにより指定したエレメントをクリックします
パラメータ:
  • タブ (TabWindowオブジェクト) -- 値を取りたいページのタブを示す TabWindowオブジェクト

  • TRUE (真偽値) -- TRUEを指定 (固定)

  • タグ指定 (文字列) -- "TAG=タグ名" でダグ指定モードになる

  • プロパティ指定 (文字列) -- "プロパティ名=値" を指定

  • n番目 (数値 省略可) -- タグ名とプロパティが一致する場合に順番を1から指定

戻り値の型:

真偽値

戻り値:

成功時TRUE

プロパティ指定について

UWSCとは異なりID, className, innerText, innerHTML以外のプロパティも指定できます
ただし、プロパティ名は大文字小文字が一致する必要があります(case sensitive)
プロパティの値は大文字小文字を無視しますが、完全一致する必要があります
BRSetData(タブ, TRUE, "TAG=IMG"[, src=EMPTY, n番目=1])
IMGエレメントをクリックします
パラメータ:
  • タブ (TabWindowオブジェクト) -- 値を取りたいページのタブを示す TabWindowオブジェクト

  • TRUE (真偽値) -- TRUEを指定 (固定)

  • "TAG=IMG" (文字列) -- "TAG=IMG" を指定 (固定)

  • src (数値 省略可) -- 対象imgタグのsrcを指定

  • n番目 (数値 省略可) -- srcが一致する場合に順番を1から指定

戻り値の型:

真偽値

戻り値:

成功時TRUE

IEGETSRC互換#

BRGetSrc(タブ, タグ名[, n番目=1])#
指定タグのエレメントのouterHTMLを返します
パラメータ:
  • タブ (TabWindowオブジェクト) -- 値を取りたいページのタブを示す TabWindowオブジェクト

  • タグ名 (文字列) -- HTMLを取得したいタグ名

  • n番目 (数値 省略可) -- タグの順番を1から指定

戻り値の型:

文字列

戻り値:

該当タグのHTMLソース、非該当ならEMPTY

IESETSRC互換#

非推奨関数

ドキュメント全体の書き換えを非推奨としているため、互換関数は存在しません

IEGETFRAME互換#

後日実装予定

TabWindowがフレーム対応し次第実装する予定です

BrowserBuilderオブジェクト#

ブラウザの起動、再接続、起動時設定を行うオブジェクト
class BrowserBuilder#
port(port)#
ブラウザのデバッグポートを変更します、デフォルトは 9222
パラメータ:

port (数値) -- 変更するデバッグポート

戻り値の型:

BrowserBuilder

戻り値:

更新されたBrowserBuilder

headless(有効=TRUE)#
ブラウザをヘッドレスで起動するかどうかを設定します
この設定は再接続時には無視されます
パラメータ:

有効 (真偽値) -- TRUEの場合ブラウザをヘッドレスで起動

戻り値の型:

BrowserBuilder

戻り値:

更新されたBrowserBuilder

private(有効=TRUE)#
ブラウザをプライベートモードで起動するかどうかを設定します
この設定は再接続時には無視されます
パラメータ:

有効 (真偽値) -- TRUEの場合ブラウザをプライベートモードで起動

戻り値の型:

BrowserBuilder

戻り値:

更新されたBrowserBuilder

profile(プロファイルパス)#
プロファイルを保存するパスを指定します
この設定は再接続時には無視されます
パラメータ:

プロファイルパス (文字列) -- プロファイルを保存するパス

戻り値の型:

BrowserBuilder

戻り値:

更新されたBrowserBuilder

argument(起動時オプション)#
ブラウザの起動時オプションを追加します

動作保証対象外の機能です

これはブラウザ起動時のオプションを任意に追加できる機能です
この機能を利用した際の動作は保証されません
ブラウザ等への影響を理解している場合のみご利用ください
この機能を利用することにより生じた不具合はUWSCRのバグとしては扱われません
パラメータ:

起動時オプション (文字列) -- 追加する起動時オプション

戻り値の型:

BrowserBuilder

戻り値:

更新されたBrowserBuilder

サンプルコード

// ブラウザの拡張機能を無効にする
builder = BrowserBuilder(BC_CHROME)
builder.argument("--disable-extensions")
chrome = builder.start()
start()#
ブラウザを起動し Browserオブジェクト を返します
戻り値の型:

Browserオブジェクト

戻り値:

対象ブラウザの Browserオブジェクト

Browserオブジェクト#

操作対象となるタブを示すオブジェクト

Browserオブジェクトの取得に時間がかかる場合がある

Browserオブジェクト作成時に対象ブラウザに対してWebSocket接続を行います
WebSocket接続が確立されるまでにある程度の時間を要するのが原因です
class Browser#
property count#

ブラウザ上の操作可能なタブの数を返します

tabs[i]

インデックスを指定し TabWindowオブジェクト を返します

配列表記対応

Browserオブジェクトに直接インデックス指定することもできます
chrome = BrowserControl(BC_CHROME)

// タブの取得
tab = chrome.tabs[0]

// 以下のようにも書ける
tab = chrome[0]
close()#
ブラウザを閉じます
戻り値:

なし

new(url)#
指定したURLを新しいタブを開きます
パラメータ:

url (文字列) -- 開きたいサイトのURL

戻り値の型:

TabWindowオブジェクト

戻り値:

新しく開いたタブの TabWindowオブジェクト

id()#
ブラウザのウィンドウIDを返します
戻り値の型:

数値

戻り値:

ウィンドウID

TabWindowオブジェクト#

タブごとのWindowオブジェクトを示すオブジェクト

一度目のプロパティ取得やメソッド実行に時間がかかる場合がある

タブ内のページ操作のためにWebSocketを使用していますが、初回のみWebSocketの接続処理が入ります
WebSocket接続が確立されるまでにある程度の時間を要するのが原因です
class TabWindow#
property document#

window.document に相当する RemoteObject を返します

ブラウザ操作の基本はdocument取得から

RemoteObject はブラウザ上のJavaScriptオブジェクトです
document を起点に querySelector 等でエレメントにアクセスできます
RemoteObject のプロパティやメソッドの実行結果は RemoteObject として返ります
そのためブラウザ上でJavaScriptを実行するかのようにブラウザ操作を行うことが可能です
詳しくは ブラウザ操作サンプル を参照してください
navigate(url)#
指定URLを開きます
ページの読み込み完了まで待機します (最大10秒)

読み込み時間が長い場合

読み込みに10秒以上かかるページに対しては navigate実行後に wait メソッドを呼んでください
パラメータ:

url (文字列) -- 開きたいサイトのURL

戻り値の型:

真偽値

戻り値:

タイムアウトした場合FALSE

reload([キャッシュ無視=FALSE])#
ページをリロードします
ページの読み込み完了まで待機します (最大10秒)

読み込み時間が長い場合

読み込みに10秒以上かかるページに対しては navigate実行後に wait メソッドを呼んでください
パラメータ:

キャッシュ無視 (真偽値) -- TRUEならキャッシュを無視してリロード (Shift+refresh と同等)

戻り値の型:

真偽値

戻り値:

タイムアウトした場合FALSE

wait([タイムアウト秒=10])#
ページの読み込みが完了するのを待ちます
リンクをクリックした後などに使用します
パラメータ:

タイムアウト秒 (数値 省略可) -- 読み込み完了まで待機する最大時間 (秒)

戻り値の型:

真偽値

戻り値:

タイムアウトした場合はFALSE

activate()#
タブをアクティブにします
戻り値:

なし

close()#
タブを閉じます
戻り値:

なし

dialog([許可=TRUE, プロンプト=EMPTY])#
JavaScriptダイアログ(alert, confirm, prompt等)を処理します
パラメータ:
  • 許可 (真偽値 省略可) -- ダイアログを閉じる方法を指定、TRUEでOK、FALSEでキャンセル

  • プロンプト (文字列 省略可) -- promptに入力する文字列

戻り値:

なし

サンプルコード

select tab.dlgtype()
    case "prompt"
        // プロンプトなら文字を入力
        tab.dialog(TRUE, "hogehoge")
    case "confirm"
        if pos("hoge", tab.dlgmsg()) > 0 then
            // メッセージに hoge という文字列が含まれていればOKを押す
            tab.dialog(TRUE)
        else
            // hoge が含まれていないものはキャンセル
            tab.dialog(FALSE)
        endif
    case EMPTY
        // ダイアログがなければなにもしない
    default
        // その他のダイアログであれば閉じる
        tab.dialog()
selend
dlgmsg()#
JavaScriptダイアログに表示されているメッセージを取得します
戻り値:

メッセージ文字列、ダイアログがない場合はEMPTY

dlgtype()#
JavaScriptダイアログの種類を取得します
種類は以下のいずれかです
  • alert

  • confirm

  • prompt

  • beforeunload

戻り値:

種類を示す文字列、ダイアログがない場合はEMPTY

leftClick(x, y)#
rightClick(x, y)#
middleClick(x, y)#
マウスクリックイベントを発生させます
それぞれ左クリック、右クリック、中央クリックを行います
パラメータ:
  • x (数値) -- ブラウザのビューポート上のX座標 (CSSピクセル単位、左上から)

  • y (数値) -- ブラウザのビューポート上のY座標 (CSSピクセル単位、左上から)

戻り値:

なし

サンプルコード

// エレメントの取得
element = browser[0].document.querySelector(selector)
// getBoundingClientRectメソッドでエレメントの座標等の情報を得る
rect = element.getBoundingClientRect()
// 座標を指定し右クリックする
tab.rightClick(rect.x + 10, rect.y + 10)
eval(JavaScript式)#
JavaScriptの式を評価し、オブジェクトの場合はRemoteObjectとして返します
パラメータ:

JavaScript式 (文字列) -- JavaScriptの式

戻り値の型:

RemoteObject またはいずれかの値型

戻り値:

評価結果がJavaScriptオブジェクトの場合は RemoteObject を返します
そうでない場合は該当するUWSCRの値型を返します

サンプルコード

chrome = BrowserControl(BC_CHROME)
tab = chrome[0]
tab.navigate(url)

func = tab.eval("(a, b) => a + b") // アロー関数を評価
print func(3, 5) // 8 (関数として実行できる)

// コールバック用のJavaScript関数を作る
callback = tab.eval("(event) => event.srcElement.style.backgroundColor = 'red'")
slct = tab.document.querySelector("select")
// イベントリスナをセット
slct.addEventListener("change", callback)

JavaScriptダイアログについて#

バージョン0.15.0まではUWSCRのスクリプトによりalert等のJavaScriptダイアログが表示された場合に動作がブロックされる問題がありました
0.16.0でこの問題が改善されましたがダイアログを TabWindow.dialog() で閉じない限り続くプロパティやメソッドがブロックされる場合があります
// スクリプトからalertを開く
tab.eval("alert('hoge');") // 0.16.0以降はブロックされない
tab.dialog()               // ダイアログを閉じる
print tab.document         // 正常動作

// ブロックされるパターン
tab.eval("alert('hoge');")
// ダイアログを閉じずにプロパティにアクセスする
print tab.document // ダイアログが閉じられるまでブロックされる

RemoteObject#

ブラウザ上に存在するJavaScriptオブジェクトを示すオブジェクト

メソッドの実行#

RemoteObject.メソッド名(引数) でメソッドを実行します
メソッド名は大文字小文字を区別します
chrome = BrowserControl(BC_CHROME)
foo = chrome[0].document.querySelector("#foo")

プロパティの取得#

RemoteObject.プロパティ名 とすることでプロパティ値を取得します
配列要素であればインデックスを指定します RemoteObject.プロパティ名[i]
プロパティ名は大文字小文字を区別します
chrome = BrowserControl(BC_CHROME)
url = chrome[0].document.URL

プロパティの変更#

RemoteObject.プロパティ名 = とすることでプロパティ値を変更します
配列要素であればインデックスを指定します RemoteObject.プロパティ名[i] =
プロパティ名は大文字小文字を区別します
chrome = BrowserControl(BC_CHROME)
foo = chrome[0].document.querySelector("#foo")
foo.value = "ほげほげ"

インデックスによるアクセス#

RemoteObject 自身が配列であった場合は RemoteObject[i] とすることで要素を得られます
chrome = BrowserControl(BC_CHROME)
links = chrome[0].document.querySelectorAll("a")
print links[0].href

関数として実行#

RemoteObject 自身が関数である場合は RemoteObject(引数) として実行できます

非同期関数とPromise#

RemoteObject 自身、またはそのメソッドが非同期関数であった場合 await 構文でその終了を待ちます
RemoteObject がPromiseであった場合は WaitTask 関数でその終了を待ちます
いずれの場合も結果を返します

戻り値について#

RemoteObject のプロパティやメソッド、インデックスから得られる値の型は以下の通りです

JavaScript型

UWSCR型

string

文字列

number

数値

bool

真偽値

null

NULL

上記以外のオブジェクト

RemoteObject

オブジェクトでもプリミティブな値でもない場合 (undefinedなど)

EMPTY

ブラウザ操作サンプル#

documentへのアクセス

// ブラウザを開く
chrome = BrowserControl(BC_CHROME)

// ひとつめのタブを得る
tab1 = chrome.tabs[0]
// 以下のようにも書けます
// tab1 = chrome[0]

// 任意のサイトを開く
tab1.navigate(url)

// window.documentを得る
document = tab1.document

// URLを得る
print document.URL

タブごとのURLを列挙

// タブの数を得る
print chrome.count

// URLを列挙
for tab in chrome.tabs
    print tab.document.URL
next
// 以下のようにも書けます
// for tab in chrome
//     print tab.document.URL
// next

自動操作用ブラウザを別途開く

// デバッグポートを開いていないブラウザがすでに開かれている場合
// 以下は再接続ができずエラーになる
// chrome = BrowserControl(BC_CHROME)

// プロファイルフォルダを指定して別のブラウザを起動する
chrome = BrowserBuilder(BC_CHROME).profile("C:\chrome\profile1").start()

Seleniumテストページの操作

// ブラウザを開く
chrome = BrowserControl(BC_CHROME)
// ブラウザをアクティブにする
ctrlwin(chrome.id(), ACTIVATE)

// 新しいタブでSeleniumのテストページを開く

tab = chrome.new('http://example.selenium.jp/reserveApp_Renewal/')
// ドキュメントを取得しておく
document = tab.document

// 宿泊日を入力

// 3日後の日付を得る
date = format(gettime(3, , G_OFFSET_DAYS), '%Y/%m/%d')

document.querySelector('#datePick').value = date
document.querySelector('#reserve_year').value = G_TIME_YY4
document.querySelector('#reserve_month').value = G_TIME_MM2
document.querySelector('#reserve_day').value = G_TIME_DD2

// 宿泊日数を選択

reserve_term = 2
document.querySelector("#reserve_term option[value='<#reserve_term>']").selected = TRUE

// 人数を選択

headcount = 5
document.querySelector("#headcount option[value='<#headcount>']").selected = TRUE

// プラン選択

// お得な観光プランをチェック
document.querySelector('#plan_b').checked = TRUE


// 名前入力

document.querySelector('#guestname').value = "おなまえ"

// 利用規約に同意して次へ をクリック

document.querySelector('#agree_and_goto_next').click()

// 読み込み完了を待つ

tab.wait()
// ページを移動したのでdocumentは取得しなおす
document = tab.document

// 合計金額を得る

price = document.querySelector('#price').textContent

// 確定ボタンを押す

document.querySelector('#commit').click()

msgbox("宿泊費用は<#price>円でした")

// タブを閉じる
tab.close()

ダウンロード先やその方法の制御について#

ダウンロードファイルの保存先フォルダの指定や、確認ダイアログの制御が現時点ではできません
ブラウザ操作にて特定のフォルダへのダウンロードを確認なしで行いたい場合は事前に以下の操作を行ってください
  1. BrowserBuilderオブジェクト で専用のプロファイルフォルダを指定し、ブラウザを起動する

  2. 起動したブラウザの設定を手動で変更する

    • Chrome
      1. 設定画面の ダウンロード を開く

      2. 保存先 を任意のフォルダに変更する

      3. ダウンロード前に各ファイルの保存場所を確認する をオフにする

    • MSEdge
      1. 設定画面の ダウンロード を開く

      2. 場所 を任意のフォルダに変更する

      3. ダウンロード時の動作を毎回確認する をオフにする

  3. 変更を施したプロファイルを指定して改めてブラウザ操作を行う

ダウンロード開始と完了の検知

  1. getdir関数で 未確認*.crdownload ファイルの数を確認し、1個以上であればダウンロードが開始されていると判定

  2. ダウンロードするファイルの名前がわかっている場合、F_EXISTSがTRUEならダウンロード完了
    あるいはgetdir関数で 未確認*.crdownload ファイルの数を確認し、0個であればダウンロード完了と判定
// ダウンロード開始検知
repeat
    sleep(0.1)
    files = getdir(download_path, "未確認*.crdownload")
until length(files) > 0

if filename != EMPTY then
    // ファイル名が分かる場合
    repeat
        sleep(1)
    until fopen(filename, F_EXISTS)
else
    // ファイル名が分からない場合
    repeat
        sleep(1)
        files = getdir(download_path, "未確認*.crdownload")
    until length(files) == 0
endif

HTTPリクエスト#

Webrequest(url)#
指定URLに対してGETリクエストを送信します
パラメータ:

url (文字列) -- リクエストを送るURL

戻り値の型:

WebResponseオブジェクト

戻り値:

レスポンスを示す WebResponseオブジェクト

サンプルコード

res = WebRequest("http://example.com")
print res.status
print res.body
WebRequestBuilder()#
WebRequest とは異なり詳細な設定を行い任意のメソッドでリクエストを送信できます
戻り値の型:

WebRequestオブジェクト

戻り値:

リクエストを行うための WebRequestオブジェクト

WebRequestオブジェクト#

HTTPリクエストを行うためのオブジェクト
class WebRequest#
useragent(UA)#
UserAgent文字列をUser-Agentヘッダに設定します
未指定の場合設定されません
パラメータ:

UA (文字列) -- UserAgent文字列

戻り値の型:

WebRequestオブジェクト

戻り値:

更新された WebRequestオブジェクト

header(キー, )#
リクエストヘッダを追加します
パラメータ:
  • キー (文字列) -- ヘッダのキー

  • (文字列) -- ヘッダの値

戻り値の型:

WebRequestオブジェクト

戻り値:

更新された WebRequestオブジェクト

timeout()#
ヘッダを設定します
未指定の場合タイムアウトしません
パラメータ:

(数値) -- タイムアウト秒

戻り値の型:

WebRequestオブジェクト

戻り値:

更新された WebRequestオブジェクト

body(本文)#
リクエスト本文を設定します
未指定の場合は何も送信しません
パラメータ:

本文 (文字列またはUObject) -- リクエスト本文、UObjectはjsonに変換されます

戻り値の型:

WebRequestオブジェクト

戻り値:

更新された WebRequestオブジェクト

basic(ユーザー名[, パスワード=EMPTY])#
Basic認証のユーザー名とパスワードを設定したAuthorizationヘッダを追加します
未指定の場合は追加されません
パラメータ:
  • ユーザー名 (文字列) -- ユーザー名

  • パスワード (文字列 省略可) -- パスワード

戻り値の型:

WebRequestオブジェクト

戻り値:

更新された WebRequestオブジェクト

bearer(トークン)#
Bearer認証のトークンを設定したAuthorizationヘッダを追加します
未指定の場合は追加されません
パラメータ:

トークン (文字列) -- 認証トークン

戻り値の型:

WebRequestオブジェクト

戻り値:

更新された WebRequestオブジェクト

get(url)#
GETリクエストを送信します
パラメータ:

url (文字列) -- リクエストを送るURL

戻り値の型:

WebResponseオブジェクト

戻り値:

WebResponseオブジェクト

put(url)#
PUTリクエストを送信します
パラメータ:

url (文字列) -- リクエストを送るURL

戻り値の型:

WebResponseオブジェクト

戻り値:

WebResponseオブジェクト

post(url)#
POSTリクエストを送信します
パラメータ:

url (文字列) -- リクエストを送るURL

戻り値の型:

WebResponseオブジェクト

戻り値:

WebResponseオブジェクト

delete(url)#
DELETEリクエストを送信します
パラメータ:

url (文字列) -- リクエストを送るURL

戻り値の型:

WebResponseオブジェクト

戻り値:

WebResponseオブジェクト

patch(url)#
PATCHリクエストを送信します
パラメータ:

url (文字列) -- リクエストを送るURL

戻り値の型:

WebResponseオブジェクト

戻り値:

WebResponseオブジェクト

head(url)#
HEADリクエストを送信します
パラメータ:

url (文字列) -- リクエストを送るURL

戻り値の型:

WebResponseオブジェクト

戻り値:

WebResponseオブジェクト

サンプルコード

request = WebRequestBuilder()
// ヘッダと認証情報を設定しておく
request.bearer(MY_BEARER_TOKEN)_
    .header('Content-Type', 'application/json')

// リクエストを送信
res1 = request.body(json1).post(url1)
res2 = request.body(json2).put(url2)

WebResponseオブジェクト#

HTTPレスポンスを示すオブジェクト
class WebResponse#
property status#
レスポンスのステータスを数値で返します
property statusText#
レスポンスのステータスを示す文字列を返します
property succeed#
リクエストの成否を真偽値で返します
property header#
レスポンスヘッダを連想配列で返します
property body#
レスポンスボディを文字列で返します、返せない場合はEMPTY
property json#
レスポンスボディがjsonの場合UObjectを返します、返せない場合はEMPTY

HTTPパーサー#

ParseHTML(html)#
HTMLをパースし HtmlNodeオブジェクト を返します
パラメータ:

html (文字列またはWebResponse) -- HTMLドキュメントまたはその一部を示す文字列、またはHTMLドキュメントとして受けた WebResponseオブジェクト

戻り値の型:

HtmlNodeオブジェクト

戻り値:

パースされたHTMLドキュメントを示す HtmlNodeオブジェクト

サンプルコード

res = WebRequest(url)
// WebResponseオブジェクトからHtmlNodeオブジェクトを得る
doc = ParseHTML(res)

// ラジオボタンのvalue値を列挙
for radio in doc.find('input[type="radio"]')
    print radio.attr('value')
next

// 最初のselect要素内のoptionのテキストと値を列挙
slct = doc.first('select')
for opt in slct.find('option')
    print opt.text
    print opt.attr('value')
next

HtmlNodeオブジェクト#

パースされたHTMLドキュメントおよびエレメントを示すオブジェクト
class HtmlNode#
find(selector)#
cssセレクタに該当するエレメント郡を HtmlNodeオブジェクト の配列として返す
空ノードの場合常に空の配列を返す
パラメータ:

selector (文字列) -- cssセレクタ

戻り値の型:

HtmlNodeオブジェクト 配列

戻り値:

cssセレクタに該当するエレメントの HtmlNodeオブジェクト 配列

first(selector)#
findfirst(selector)#
cssセレクタに該当する最初のエレメントを HtmlNodeオブジェクト として返す
該当するエレメントがない場合は空ノードを返す
空ノードの場合常に空ノードを返す
パラメータ:

selector (文字列) -- cssセレクタ

戻り値の型:

HtmlNodeオブジェクト

戻り値:

cssセレクタに該当する最初のエレメントの HtmlNodeオブジェクト

attr(属性名)#
attribute(属性名)#
エレメントの属性名を指定してその値を返す
HTMLドキュメント、空ノードの場合は常にEMPTYを返す
パラメータ:

属性名 (文字列) -- 属性の名前

戻り値の型:

文字列またはEMPTY

戻り値:

該当する属性の値、属性がない場合EMPTY

property outerhtml#
  • HTMLドキュメント: 全体のHTMLを文字列で返す

  • エレメント: エレメント自身を含むHTMLを文字列で返す

  • 空ノード: EMPTY

property innerhtml#
  • HTMLドキュメント: EMPTY

  • エレメント: エレメント以下のHTMLを文字列で返す

  • 空ノード: EMPTY

property text#
  • HTMLドキュメント: EMPTY

  • エレメント: エレメントのテキストノードを文字列の配列で返す

  • 空ノード: EMPTY

property isempty#
空ノードであればTRUE