ブラウザ操作 - 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を実行する