ブラウザ操作 - stuncloud/UWSCR GitHub Wiki
対応バージョン: 0.2.1
Devtools protocolを用いたブラウザ操作を行います
デバッグポート9222(変更可)でブラウザを起動します
すでにブラウザが起動していた場合は指定ポートが開かれているかを確認後以下のように動作します
- 開いている→そのブラウザに再接続
- 開いていない→エラー (ブラウザを閉じて再実行してください)
Browser = BrowserControl(ブラウザ定数 ,フィルタ=EMPTY, ポート=9222, ヘッドレス=FALSE)
| 変数名 | 型 | 種別 | 説明 |
|---|---|---|---|
| ブラウザ定数 | 定数 | 必須 | 以下の定数を指定 |
BC_CHROME (1): Google Chromeを操作します |
|||
BC_MSEDGE (2): Microsoft Edgeを操作します |
|||
| フィルタ | 文字列 | 省略可 | タイトルまたはURLにマッチするタブを操作します |
| 省略時は1番目のタブ | |||
| ポート | 数値 | 省略可 | デバッグ待受用ポート |
| 再接続する場合はポート番号が一致している必要があります | |||
| ヘッドレス | bool | 省略可 | TRUEにした場合はブラウザを非表示で起動します |
| 再接続時は無視されます | |||
| Browser | オブジェクト | 戻り値 | Browserオブジェクト |
設定ファイルにて任意のパスを指定できます
nullの場合はパスを自動取得します
自動取得がうまく行かない場合にパスを指定してください
jsonなので\はエスケープ(\\)してください
{
"browser": {
"chrome": null,
"msedge": null
},
}サンプルではBrowserオブジェクトをbrowserと表記します
documentを示すElementオブジェクトを返します
Elementオブジェクト = browser.document
呼ぶ度にdocumentを再取得します
(DOMに変更があった等、再取得が必要になる場合がある)
操作中のページのURLを返します
HTMLソースを返します
(その時点のDOMツリーを返すため、HTMLソースファイルの内容とは異なる場合があります)
操作中のページのIDを返します
対象ブラウザのウィンドウIDを取得します
id = browser.windowId()
| 変数名 | 型 | 種別 | 説明 |
|---|---|---|---|
| id | 数値 | 戻り値 | ブラウザのID |
取得に失敗した場合は-1
|
指定したURIを開きます
ページ遷移が完了するまで最大10秒待機します
読込完了 = browser.navigate(uri)
| 変数名 | 型 | 種別 | 説明 |
|---|---|---|---|
| uri | 文字列 | 必須 | 開きたいサイトのURI |
| 読込完了 | bool値 | 戻り値 | 10秒待機しても読み込みが完了しない場合はFALSE |
ページをリロードします
リロードが完了するまで最大10秒待機します
読込完了 = browser.reload(キャッシュ無視=FALSE)
| 変数名 | 型 | 種別 | 説明 |
|---|---|---|---|
| キャッシュ無視 | bool | 省略可 | TRUEならキャッシュを無視する(Shift+refreshと同等) |
| 読込完了 | bool値 | 戻り値 | 10秒待機しても読み込みが完了しない場合はFALSE |
ページの読み込みが完了するまで待ちます
リンクをクリックした後などに使用します
読込完了 = browser.wait([タイムアウト = 10])
| 変数名 | 型 | 種別 | 説明 |
|---|---|---|---|
| タイムアウト | 数値 | 省略可 | 読み込み完了まで待機する時間(秒) デフォルト10秒 |
| 読込完了 | bool値 | 戻り値 | タイムアウトを過ぎても読み込み完了しない場合はFALSE |
操作中のタブを閉じます
browser.close()
タブ一覧を取得します
タブリスト = browser.getTabs([フィルタ])
| 変数名 | 型 | 種別 | 説明 |
|---|---|---|---|
| フィルタ | 文字列 | 省略可 | タイトルかURLがマッチするタブのみ取得 (省略時はすべて) |
| タブリスト | 二次元配列 | 戻り値 | 配列の各要素は更に以下の要素を持つ |
| 0: タブのタイトル | |||
| 1: タブのURL | |||
| 2: タブのページID |
for tab in browser.gettabs()
print 'title : ' + tab[0]
print 'url : ' + tab[1]
print 'pageid: ' + tab[2]
next新しいタブを開きそのタブのBrowserオブジェクトを返します
Browser = browser.newTab(uri)
| 変数名 | 型 | 種別 | 説明 |
|---|---|---|---|
| uri | 文字列 | 必須 | 開きたいURI |
| Browser | オブジェクト | 戻り値 | Browserオブジェクト |
操作対象タブをアクティブにします
browser.activate()
JavaScriptを実行します
戻り値 = browser.execute(スクリプト, [引数, 変数名])
| 変数名 | 型 | 種別 | 説明 |
|---|---|---|---|
| スクリプト | 文字列 | 必須 | 実行するJavaScript |
| 引数 | 値 | 省略可 | JavaScriptに渡す値 |
| 変数名 | 文字列 | 省略可 | 引数を受ける変数名 |
省略時は arg
|
|||
| 戻り値 | 値 | 戻り値 | スクリプトの実行結果 |
print browser.execute('3 + 5') // 8
// 変数名を渡さなかった場合argという変数が使える
// UObjectを渡した場合はJavaScript内でオブジェクトに変換される
print browser.execute('arg.a * arg.b', @{"a": 3, "b": 5}@) // 15
// 変数名を指定するとその変数名で引数にアクセスできる
print browser.execute('3 * hoge', 6, "hoge") // 18- idやnameなどの属性値(アトリビュート)の取得及び変更
- innerHTMLなどのプロパティの取得及び変更
属性値(アトリビュート)やプロパティの名前はcase sensitiveです
(大文字小文字まで一致する必要があります)
存在しない名前を指定した場合はNULLが返ります
element = browser.document.querySelector(selector)
// 属性値
print element.value
element.value = "hoge"
// プロパティ
print inner := element.innerHTML
element.innerHTML = "<p><#inner></p>" // innerHTMLをPタグで包む親のElementオブジェクトを取得します
element = browser.document.querySelector(selector)
parent = element.parentCSSセレクタを指定しエレメントを取得します
エレメント = element.queryselector(セレクタ)
| 変数名 | 型 | 種別 | 説明 |
|---|---|---|---|
| セレクタ | 文字列 | 必須 | エレメントを特定するCSSセレクタ |
| エレメント | オブジェクト | 戻り値 | Elementオブジェクト |
| 該当するエレメントがなかった場合はEMPTY |
element = browser.document.querySelector("form")
child = element.querySelector('input[type="password"]')CSSセレクタに該当するすべてのエレメントを取得します
エレメント配列 = element.queryselector(セレクタ)
| 変数名 | 型 | 種別 | 説明 |
|---|---|---|---|
| セレクタ | 文字列 | 必須 | エレメントを特定するCSSセレクタ |
| エレメント配列 | 配列 | 戻り値 | Elementオブジェクトの配列 |
| 該当するエレメントがなかった場合は空配列 |
form = browser.document.querySelector("form")
inputs = form.querySelectorAll("input")
for input in inputs
print input.type
nextエレメントをフォーカスします
element.focus()
指定文字列を一文字ずつ入力します
element.input(文字列)
| 変数名 | 型 | 種別 | 説明 |
|---|---|---|---|
| 文字列 | 文字列 | 必須 | エレメントに入力する文字列 |
エレメントのvalueを空にします
element.clear()
element = browser.document.querySelector('input[type="text"]')
print element.value // 元の入力値
element.clear()
print element.value // 空になっているファイル選択(input[type="file"])に値を入力します
element.setfile(ファイルパス)
element.setfile(ファイルパス配列)
| 変数名 | 型 | 種別 | 説明 |
|---|---|---|---|
| ファイルパス | 文字列 | 必須 |
input[type="file"] に入力するファイルパス |
| ファイルパス配列 | 配列 | 必須 | multipleが有効な場合配列指定で複数のパスを入力できる |
element = browser.document.querySelector('input[type="file"]')
element.SetFile("hoge.jpg")エレメントをクリックします
element.click()
チェックボックスやラジオボタンを選択状態にします
element.select()
JavaScriptを実行します
$0で自身にアクセスできます
戻り値 = element.execute(スクリプト, [引数, 変数名])
| 変数名 | 型 | 種別 | 説明 |
|---|---|---|---|
| スクリプト | 文字列 | 必須 | 実行するJavaScript |
| 引数 | 値 | 省略可 | JavaScriptに渡す値 |
| 変数名 | 文字列 | 省略可 | 引数を受ける変数名 |
省略時は arg
|
|||
| 戻り値 | 値 | 戻り値 | スクリプトの実行結果 |
element = browser.document.querySelector('input[type="button"]')
element.execute('$0.onclick()') // エレメントのonclickを実行する