ブラウザ操作 - 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.parent
CSSセレクタを指定しエレメントを取得します
エレメント = 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を実行する