ウェブ関連#
ブラウザ操作#
破壊的変更が行われました
ブラウザパスの指定方法
{
"browser": {
"chrome": "C:\\path\\to\\chrome.exe",
"msedge": "C:\\path\\to\\msedge.exe"
},
}
null
にします{
"browser": {
"chrome": null,
"msedge": null
},
}
- BrowserControl(ブラウザ定数[, ポート=9222])#
-
Google Chrome
Microsoft Edge
- パラメータ:
ブラウザ定数 (定数) --
以下のいずれかを指定
- BC_CHROME
Google Chromeを操作します
- BC_MSEDGE
Microsoft Edgeを操作します
ポート (数値 省略可) -- デバッグポートを指定する
- 戻り値の型:
- 戻り値:
対象ブラウザの 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(ブラウザ定数)#
- BrowserBuilderオブジェクト を返します最低限の設定でブラウザを起動する
BrowserControl
関数とは異なり BrowserBuilderオブジェクト を介して様々な設定が行なえます- パラメータ:
ブラウザ定数 (定数) --
以下のいずれかを指定
- BC_CHROME
Google Chromeを操作します
- BC_MSEDGE
Microsoft Edgeを操作します
- 戻り値の型:
- 戻り値:
対象ブラウザの 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互換#
非推奨関数
IELINK互換#
- BRLink(タブ, リンク文字[, n番目=1, 完全一致=FALSE])#
- 指定リンクをクリックします
- パラメータ:
タブ (TabWindowオブジェクト) -- 値を取りたいページのタブを示す TabWindowオブジェクト
リンク文字 (文字列) -- リンクに表示されている文字列(デフォルトは部分一致)
n番目 (数値 省略可) -- リンク文字が同一の場合に順番を1から指定
完全一致 (真偽値 省略可) -- TRUEの場合完全一致するリンク文字を検索する
- 戻り値の型:
真偽値
- 戻り値:
該当するリンクが存在しクリックを実行した場合TRUE
IEGETFRAME互換#
後日実装予定
BrowserBuilderオブジェクト#
- class BrowserBuilder#
- port(port)#
- ブラウザのデバッグポートを変更します、デフォルトは
9222
- パラメータ:
port (数値) -- 変更するデバッグポート
- 戻り値の型:
- 戻り値:
更新されたBrowserBuilder
- headless(有効=TRUE)#
- ブラウザをヘッドレスで起動するかどうかを設定しますこの設定は再接続時には無視されます
- パラメータ:
有効 (真偽値) -- TRUEの場合ブラウザをヘッドレスで起動
- 戻り値の型:
- 戻り値:
更新されたBrowserBuilder
- private(有効=TRUE)#
- ブラウザをプライベートモードで起動するかどうかを設定しますこの設定は再接続時には無視されます
- パラメータ:
有効 (真偽値) -- TRUEの場合ブラウザをプライベートモードで起動
- 戻り値の型:
- 戻り値:
更新されたBrowserBuilder
- profile(プロファイルパス)#
- プロファイルを保存するパスを指定しますこの設定は再接続時には無視されます
- パラメータ:
プロファイルパス (文字列) -- プロファイルを保存するパス
- 戻り値の型:
- 戻り値:
更新されたBrowserBuilder
- argument(起動時オプション)#
- ブラウザの起動時オプションを追加します
動作保証対象外の機能です
これはブラウザ起動時のオプションを任意に追加できる機能ですこの機能を利用した際の動作は保証されませんブラウザ等への影響を理解している場合のみご利用くださいこの機能を利用することにより生じた不具合はUWSCRのバグとしては扱われません- パラメータ:
起動時オプション (文字列) -- 追加する起動時オプション
- 戻り値の型:
- 戻り値:
更新されたBrowserBuilder
サンプルコード
// ブラウザの拡張機能を無効にする builder = BrowserBuilder(BC_CHROME) builder.argument("--disable-extensions") chrome = builder.start()
- start()#
- ブラウザを起動し Browserオブジェクト を返します
- 戻り値の型:
- 戻り値:
対象ブラウザの Browserオブジェクト
Browserオブジェクト#
Browserオブジェクトの取得に時間がかかる場合がある
- 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オブジェクト
- id()#
- ブラウザのウィンドウIDを返します
- 戻り値の型:
数値
- 戻り値:
ウィンドウID
TabWindowオブジェクト#
一度目のプロパティ取得やメソッド実行に時間がかかる場合がある
- class TabWindow#
- property document#
window.document
に相当する RemoteObject を返しますブラウザ操作の基本はdocument取得から
RemoteObject はブラウザ上のJavaScriptオブジェクトですdocument
を起点にquerySelector
等でエレメントにアクセスできますRemoteObject のプロパティやメソッドの実行結果は RemoteObject として返りますそのためブラウザ上でJavaScriptを実行するかのようにブラウザ操作を行うことが可能です詳しくは ブラウザ操作サンプル を参照してください
- 指定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ダイアログについて#
TabWindow.dialog()
で閉じない限り続くプロパティやメソッドがブロックされる場合があります// スクリプトからalertを開く
tab.eval("alert('hoge');") // 0.16.0以降はブロックされない
tab.dialog() // ダイアログを閉じる
print tab.document // 正常動作
// ブロックされるパターン
tab.eval("alert('hoge');")
// ダイアログを閉じずにプロパティにアクセスする
print tab.document // ダイアログが閉じられるまでブロックされる
RemoteObject#
メソッドの実行#
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[i]
とすることで要素を得られますchrome = BrowserControl(BC_CHROME)
links = chrome[0].document.querySelectorAll("a")
print links[0].href
関数として実行#
RemoteObject(引数)
として実行できます非同期関数とPromise#
WaitTask
関数でその終了を待ちます戻り値について#
RemoteObject のプロパティやメソッド、インデックスから得られる値の型は以下の通りです
JavaScript型 |
UWSCR型 |
---|---|
string |
文字列 |
number |
数値 |
bool |
真偽値 |
null |
NULL |
上記以外のオブジェクト |
|
オブジェクトでもプリミティブな値でもない場合 (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()
ダウンロード先やその方法の制御について#
BrowserBuilderオブジェクト で専用のプロファイルフォルダを指定し、ブラウザを起動する
起動したブラウザの設定を手動で変更する
- Chrome
設定画面の ダウンロード を開く
保存先 を任意のフォルダに変更する
ダウンロード前に各ファイルの保存場所を確認する をオフにする
- MSEdge
設定画面の ダウンロード を開く
場所 を任意のフォルダに変更する
ダウンロード時の動作を毎回確認する をオフにする
変更を施したプロファイルを指定して改めてブラウザ操作を行う
ダウンロード開始と完了の検知
getdir関数で
未確認*.crdownload
ファイルの数を確認し、1個以上であればダウンロードが開始されていると判定- ダウンロードするファイルの名前がわかっている場合、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オブジェクト
サンプルコード
res = WebRequest("http://example.com") print res.status print res.body
- WebRequestBuilder()#
- WebRequestオブジェクト を返します
WebRequest
とは異なり詳細な設定を行い任意のメソッドでリクエストを送信できます- 戻り値の型:
- 戻り値:
リクエストを行うための WebRequestオブジェクト
WebRequestオブジェクト#
- class WebRequest#
- useragent(UA)#
- UserAgent文字列をUser-Agentヘッダに設定します未指定の場合設定されません
- パラメータ:
UA (文字列) -- UserAgent文字列
- 戻り値の型:
- 戻り値:
更新された WebRequestオブジェクト
- header(キー, 値)#
- リクエストヘッダを追加します
- パラメータ:
キー (文字列) -- ヘッダのキー
値 (文字列) -- ヘッダの値
- 戻り値の型:
- 戻り値:
更新された WebRequestオブジェクト
- timeout(秒)#
- ヘッダを設定します未指定の場合タイムアウトしません
- パラメータ:
秒 (数値) -- タイムアウト秒
- 戻り値の型:
- 戻り値:
更新された WebRequestオブジェクト
- body(本文)#
- リクエスト本文を設定します未指定の場合は何も送信しません
- パラメータ:
本文 (文字列またはUObject) -- リクエスト本文、UObjectはjsonに変換されます
- 戻り値の型:
- 戻り値:
更新された WebRequestオブジェクト
- basic(ユーザー名[, パスワード=EMPTY])#
- Basic認証のユーザー名とパスワードを設定したAuthorizationヘッダを追加します未指定の場合は追加されません
- パラメータ:
ユーザー名 (文字列) -- ユーザー名
パスワード (文字列 省略可) -- パスワード
- 戻り値の型:
- 戻り値:
更新された WebRequestオブジェクト
- bearer(トークン)#
- Bearer認証のトークンを設定したAuthorizationヘッダを追加します未指定の場合は追加されません
- パラメータ:
トークン (文字列) -- 認証トークン
- 戻り値の型:
- 戻り値:
更新された WebRequestオブジェクト
- get(url)#
- GETリクエストを送信します
- パラメータ:
url (文字列) -- リクエストを送るURL
- 戻り値の型:
- 戻り値:
- put(url)#
- PUTリクエストを送信します
- パラメータ:
url (文字列) -- リクエストを送るURL
- 戻り値の型:
- 戻り値:
- post(url)#
- POSTリクエストを送信します
- パラメータ:
url (文字列) -- リクエストを送るURL
- 戻り値の型:
- 戻り値:
- delete(url)#
- DELETEリクエストを送信します
- パラメータ:
url (文字列) -- リクエストを送るURL
- 戻り値の型:
- 戻り値:
- patch(url)#
- PATCHリクエストを送信します
- パラメータ:
url (文字列) -- リクエストを送るURL
- 戻り値の型:
- 戻り値:
- head(url)#
- HEADリクエストを送信します
- パラメータ:
url (文字列) -- リクエストを送るURL
- 戻り値の型:
- 戻り値:
サンプルコード
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パーサー#
- ParseHTML(html)#
- HTMLをパースし HtmlNodeオブジェクト を返します
- パラメータ:
html (文字列またはWebResponse) -- HTMLドキュメントまたはその一部を示す文字列、またはHTMLドキュメントとして受けた WebResponseオブジェクト
- 戻り値の型:
- 戻り値:
パースされた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オブジェクト#
- class HtmlNode#
- find(selector)#
- cssセレクタに該当するエレメント郡を HtmlNodeオブジェクト の配列として返す空ノードの場合常に空の配列を返す
- パラメータ:
selector (文字列) -- cssセレクタ
- 戻り値の型:
- 戻り値:
cssセレクタに該当するエレメントの HtmlNodeオブジェクト 配列
- first(selector)#
- findfirst(selector)#
-
- パラメータ:
selector (文字列) -- cssセレクタ
- 戻り値の型:
- 戻り値:
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