UwscWebDriverのwikiの元となったmarkdownファイル群です。リンク等は機能しない可能性があります。
-
-
Save stuncloud/b1e8135446b5f15709a9d98b2288e15e to your computer and use it in GitHub Desktop.
詳細は0.4.2以前を見てください
[[WebDriverOptionオブジェクト]]をそのまま渡せるようになりました
call UwscWebDriver.uws
opt = WebDriver.Option("chrome")
opt.args.add("--user-data-dir=C:\\Users\\{your_name}\\AppData\\Local\\Google\\Chrome\\User Data") // {your_name}を適宜変更
opt.args.add("--profile-directory={profile_name}") // {profile_name}を適宜変更
driver = WebDriver.Chrome(9515, opt)
詳細は0.4.2以前を見てください
call UwscWebDriver.uws
opt = WebDriver.Option("chrome")
opt.args.add("--user-data-dir=C:\\Users\\{your_name}\\AppData\\Local\\Google\\Chrome\\User Data") // {your_name}を適宜変更
opt.args.add("--profile-directory={profile_name}") // {profile_name}を適宜変更
driver = WebDriver.Chrome(9515, opt.toString())
起動オプションに--user-data-dir
と--profile-directory
を入れます
call UwscWebDriver
// ユーザーデータがある場所
// おそらくデフォルトは%localappdata%\Google\Chrome\User Dataです
// {your_name}の部分、またはパスそのものを適宜変更してください
userDataPath = "C:\Users\{your_name}\AppData\Local\Google\Chrome\User Data"
// プロファイル名、おそらくデフォルトはdefaultです
// {your_profile}の部分を適宜変更してください
profileName = "{your_profile}"
// capabilitiesを作成
ChromeProfileCapabilities = GetChromeProfileCapabilities(userDataPath, profileName)
driver = WebDriver.Chrome(9515, ChromeProfileCapabilities)
// うまくいけば自分のプロファイルを読み込んで開かれているはず
msgbox(1)
driver.Close()
function GetChromeProfileCapabilities(path, name)
result = replace(template, "%profile%", replace(path, "\", "\\"))
result = replace(result, "%name%", name)
fend
textblock template
{
"capabilities": {
"alwaysMatch": {
"browserName": "chrome",
"goog:chromeOptions": {
"args": [
"--user-data-dir=%profile%",
"--profile-directory=%name%"
]
}
}
}
}
endtextblock
プロファイル名についてはユーザーデータのディレクトリを見ると
Default
Default.optimization_guide_model_and_features_store
Default.previews_hint_cache_store
Guest Profile
Guest Profile.optimization_guide_model_and_features_store
Guest Profile.previews_hint_cache_store
みたいな感じのディレクトリができてて、この場合Default
だったりGuest Profile
だったりがそれです
input
や textarea
に対して Clear()
を実行しても入力値がクリアされない場合があるようです
element.Clear() // 消えない場合がある
// エレメントのvalueプロパティに空文字を代入する
element.ExecuteScript("$0.value = '';")
ExecuteScript
でもクリアできなかった場合に以下を行ったところうまく行ったという報告がありました
// エレメントをクリック
element.Click()
// エレメントのvalueプロパティに空文字を代入する
element.ExecuteScript("$0.value = '';")
ブラウザ操作に関するオブジェクトです
[WebDriver.Start|WebDriverモジュール#WebDriver.Start]等の関数が返します
- メソッド
- GetSession
- GetBrowserName
- GetBrowserVersion
- Navigate
- Reload
- SwitchWindow
- SwitchFrame
- GetCurrentWindowHandle
- GetWindowHandles
- GetUrl
- GetTitle
- GetSource
- FindElement
- FindElements
- FindElementsByName
- FindElementByXPath
- FindElementsByXPath
- ExecuteScript
- GetDialogText
- SetDialogText
- AcceptDialog
- DismissDialog
- GetRect
- SetRect
- Maximize
- Minimize
- Fullscreen
- Close
- SetImplicitWait
メソッドの書式には以下が利用可能です
- PascalCase
- lowercase
- UPPERCASE
- camelCase
- snake_case (単語区切りがある場合のみ、小文字限定)
// 以下はOK
driver.FindElement() // PascalCase
driver.findelement() // lowercase
driver.FINDELEMENT() // UPPERCASE
driver.findElement() // camelCase
driver.find_element() // snake_case
// 以下はNG
// 単語区切りではない場所の大文字
driver.FindELEMENT()
// 単語区切りの頭が小文字
driver.Findelement()
// snakecaseで大文字を含む
driver.Find_Element()
戻り値 = driver.GetSession()
現在のwebdriverセッション情報を取得します
- 戻り値
セッション情報 (文字列)
戻り値 = driver.GetBrowserName()
操作対象ブラウザの名前を取得します
- 戻り値
ブラウザ名 (文字列)
戻り値 = driver.GetBrowserVersion()
操作対象ブラウザのバージョンを取得します
- 戻り値
ブラウザバージョン (文字列)
戻り値 = driver.Navigate(url [, target])
- url
指定したURLを開きます - target
省略可
値を指定した場合は別タブで開かれます - 戻り値
なし
// 任意のURLを開く
driver.Navigate(url)
// 任意のURLを別タブで開く
driver.Navigate(url, "_blank")
driver.Reload()
開いているページをリロードします
- 戻り値
なし
戻り値 = driver.SwitchWindow(handleOrName)
別のウィンドウ(タブ)に制御を移します
- handleOrName
ウィンドウハンドル、またはウィンドウ名
ウィンドウ名はwindow.name
です
targetで別名指定されていた場合などに使います
ただしハンドルを指定するより遅いです - 戻り値
制御を移したウィンドウのハンドル
// 元のタブのウィンドウハンドルを得る
hFirst = driver.GetCurrentWindowHandle()
// 別タブを開く
driver.Navigate(url, "SecondTab")
// 別タブに制御を移す
hSecond = driver.SwitchWindow("SecondTab")
// 元のウィンドウに戻る
driver.SwitchWindow(hFirst)
※ 動作保証対象外です
戻り値 = driver.SwitchFrame(id)
操作対象のフレームを切り替えます
- id
フレームを示すid (0から)
-1
を指定した場合親フレームに切り替わる - 戻り値
フレーム切り替えに成功したらTrue
戻り値 = driver.GetCurrentWindowHandle()
現在の制御対象ウィンドウのハンドルを得ます
- 戻り値
ウィンドウハンドル
戻り値 = driver.GetWindowHandles()
制御可能なウィンドウのハンドルを列挙します
- 戻り値
ウィンドウハンドルの配列(SafeArray)
for h in driver.GetWindowHandles()
driver.SwitchWindow(h)
// それぞれのウィンドウに対する処理を実行
DoSomoThing(driver)
next
戻り値 = driver.GetUrl()
現在開いているページのURLを取得します
- 戻り値
URL
戻り値 = driver.GetTitle()
現在開いているページのタイトルを取得します
- 戻り値
タイトル
戻り値 = driver.GetSource()
現在開いているページのHTMLソースを取得します
- 戻り値
HTMLソース
戻り値 = driver.FindElement(selector)
cssセレクタを指定して該当するエレメントの[[elementオブジェクト]]を取得します
- selector
対象エレメントのcssセレクタ
[[Byモジュール]]が利用可能 - 戻り値
- 成功時
[[elementオブジェクト]] - 失敗時
null
- 成功時
戻り値 = driver.FindElements(selector)
cssセレクタを指定して該当する複数のエレメントの[[elementオブジェクト]]を取得します
- selector
対象エレメントのcssセレクタ
[[Byモジュール]]が利用可能 - 戻り値
- 成功時
[[elementオブジェクト]]配列 (SafeArray) - 失敗時
null
- 成功時
戻り値 = driver.FindElementsByName(name)
name属性の値を指定して該当する複数のエレメントの[[elementオブジェクト]]を取得します
- selector
対象エレメントのname属性 - 戻り値
- 成功時
[[elementオブジェクト]]配列 (SafeArray) - 失敗時
null
- 成功時
戻り値 = driver.FindElementByXPath(xpath)
xpathを指定して該当するエレメントの[[elementオブジェクト]]を取得します
- xpath
対象エレメントのxpath - 戻り値
- 成功時
[[elementオブジェクト]] - 失敗時
null
- 成功時
戻り値 = driver.FindElementsByXPath(xpath)
xpathを指定して該当する複数のエレメントの[[elementオブジェクト]]を取得します
- xpath
対象エレメントのxpath - 戻り値
- 成功時
[[elementオブジェクト]]配列 (SafeArray) - 失敗時
null
- 成功時
戻り値 = driver.ExecuteScript(script [, arg1, arg2, ...])
任意のJavaScriptを実行させます
- script
JavaScriptのスクリプト構文 - arg1, arg2, ...
実行するJavaScriptに渡す引数を指定 (可変長、省略可)
script
内でarguments[]
としてこの値にアクセスできます
args1
はarguments[0]
、args2
はarguments[1]
のように順に対応しています
[[elementオブジェクト]]を渡す場合は[[raw()|elementオブジェクト#raw]]メソッドを呼びます - 戻り値
script
内でreturn
した以下に該当する値 (それ以外はnull)- 文字列、数値
- エレメント ([[elementオブジェクト]]として返ります) ※0.8.4から
0.11.0
以降では以下のように書けます
elem = driver.FindElement(selector)
textblock js
arguments[0].style.backgroungColor = arguments[1];
return arguments[0].outerHTML;
endtextblock
outerhtml = driver.ExecuteScript(js, elem.raw(), "red")
print driver.ExecuteScript("return [...arguments].reduce((a,b) => a + b);", 1, 3, 5, 7) // 16
0.7.2
以降では以下のように書けます
elem = driver.FindElement(selector)
textblock js
arguments[0].style.backgroungColor = arguments[1];
return arguments[0].outerHTML;
endtextblock
outerhtml = driver.ExecuteScript(js, JS.Args(elem.raw(), "red"))
0.7.1以前
elem = driver.FindElement(selector)
textblock js
arguments[0].style.backgroungColor = arguments[1];
return arguments[0].outerHTML;
endtextblock
// js配列を作る
args = WebDriver.CreateJSArray()
// js要素を足す
// elementオブジェクトも渡せる、その場合raw()メソッドを使う
args.push(elem.raw())
// 文字列とかでも当然OK
args.push("red")
outerhtml = driver.ExecuteScript(js, args)
戻り値 = driver.GetDialogText()
window.alert()
, window.confirm()
, window.prompt()
で表示されたダイアログのテキストを取得します
- 戻り値
ダイアログに表示されたテキスト
戻り値 = driver.SetDialogText(value)
window.prompt()
で表示されたプロンプトに値を入力します
window.alert()
, window.confirm()
に対しては無効です
- value
ダイアログに入力する値 - 戻り値
なし
戻り値 = driver.AcceptDialog()
window.alert()
, window.confirm()
, window.prompt()
のOKボタンを押します
- 戻り値
なし
戻り値 = driver.DismissDialog()
window.alert()
, window.confirm()
, window.prompt()
のキャンセルボタンを押します
(window.alert()
にキャンセルボタンはありませんが閉じられます)
- 戻り値
なし
戻り値 = driver.GetRect()
ブラウザのサイズと座標を取得します
- 戻り値
Rectオブジェクト
以下のフィールドを持ちます- width (幅)
- height (高さ)
- x (x座標)
- y (y座標)
rect = driver.GetRect()
if (rect <> null) then
with rect
print "幅: " + .width
print "高さ: " + .height
print "x座標: " + .x
print "y座標: " + .y
endwith
endif
戻り値 = driver.SetRect(width, height, x, y)
ブラウザのサイズと座標を変更します
- width
ブラウザの幅
変更しない場合はnull
にする - height
ブラウザの高さ
変更しない場合はnull
にする - x
ブラウザのx座標
変更しない場合はnull
にする - y
ブラウザのy座標
変更しない場合はnull
にする - 戻り値
Rectオブジェクト
戻り値 = driver.Maximize()
ブラウザを最大化します
- 戻り値
Rectオブジェクト
戻り値 = driver.Minimize()
ブラウザを最小化します
- 戻り値
Rectオブジェクト
戻り値 = driver.Fullscreen()
ブラウザをフルスクリーン表示します
※ フルスクリーンに対応しているブラウザのみ
- 戻り値
Rectオブジェクト
driver.Close()
セッションを終了しブラウザを閉じます
WebDriverは起動したままなので、WebDriverを終了させたい場合は手動でコマンドプロンプトを閉じてください
- 戻り値
なし
FindElement等の最大待ち時間を設定します
初期値は 10000
(10秒)です
driver.SetImplicitWait(待機時間)
- 待機時間
- 待機時間をミリ秒で指定
- 戻り値
- なし
// セレクタに該当するエレメントがない場合10秒待機します
elem = driver.FindElement(invalid_selector) // 不正なセレクタ
// 待機時間を500ミリ秒 (0.5秒) に変更
driver.SetImplicitWait(500)
// 待機時間が0.5秒に短縮される
elem = driver.FindElement(invalid_selector) // 不正なセレクタ
エレメント操作に関するオブジェクトです
[[driverオブジェクト]]の[FindElement|driverオブジェクト#FindElement]等が返します
メソッドの書式には以下が利用可能です
- PascalCase
- lowercase
- UPPERCASE
- camelCase (単語区切りがある場合のみ)
- snake_case (単語区切りがある場合のみ、小文字限定)
// 以下はOK
element.FindElement() // PascalCase
element.findelement() // lowercase
element.FINDELEMENT() // UPPERCASE
element.findElement() // camelCase
element.find_element() // snake_case
// 以下はNG
// 単語区切りではない場所の大文字
element.FindELEMENT()
// 単語区切りの頭が小文字
element.Findelement()
// snakecaseで大文字を含む
element.Find_Element()
戻り値 = element.FindElement(selector)
対象エレメントを起点としたcssセレクタを指定して該当するエレメントの[[elementオブジェクト]]を取得します
- selector
対象エレメントのcssセレクタ
[[Byモジュール]]が利用可能 - 戻り値
- 成功時
[[elementオブジェクト]] - 失敗時
null
- 成功時
戻り値 = element.FindElements(selector)
対象エレメントを起点としたcssセレクタを指定して該当する複数のエレメントの[[elementオブジェクト]]を取得します
- selector
対象エレメントのcssセレクタ
[[Byモジュール]]が利用可能 - 戻り値
- 成功時
[[elementオブジェクト]]配列 (SafeArray) - 失敗時
null
- 成功時
戻り値 = element.FindElementByXPath(xpath)
対象エレメントを起点としたxpathを指定して該当するエレメントの[[elementオブジェクト]]を取得します
- selector
対象エレメントのxpath - 戻り値
- 成功時
[[elementオブジェクト]] - 失敗時
null
- 成功時
戻り値 = element.FindElementsByXPath(xpath)
対象エレメントを起点としたxpathを指定して該当する複数のエレメントの[[elementオブジェクト]]を取得します
- selector
対象エレメントのxpath - 戻り値
- 成功時
[[elementオブジェクト]]配列 (SafeArray) - 失敗時
null
- 成功時
戻り値 = element.Click()
エレメントをクリックします
- 戻り値
なし
input[type="text"]
等の値を消去します
element.Clear()
戻り値 = element.SetValue(value)
input[type="text"]
等の文字入力欄に値を入力します
もともと値が入力されている場合は追記されます
新しく値を入力する場合は事前にClear()を呼んでください
input[type="file"]
に対してファイルパスを指定できます
実在するファイルのパスを指定する必要があります
- value
入力する値 - 戻り値
なし
戻り値 = element.GetValue()
inputやselect等のvalueの値を取得します
- 戻り値
取得した値
戻り値 = element.GetText()
エレメント配下のテキストノードの値を取得します
- 戻り値
取得した値
戻り値 = element.GetAttribute(attribute)
エレメントの属性の値を取得します
- attribute
属性の名前 - 戻り値
取得した値
戻り値 = element.GetProperty(property)
エレメントのプロパティを取得します
- property
プロパティ名 - 戻り値
取得した値
戻り値 = element.IsSelected()
ラジオボタン等が選択されているかどうかを取得します
- 戻り値
bool値
戻り値 = element.ExecuteScript(script [, args1, arg2, ...])
任意のJavaScriptを実行させます
- script
JavaScriptのスクリプト構文 - args1, arg2, ...
実行するJavaScriptに渡す引数を指定 (可変長、省略可)
script
内でarguments[]
としてこの値にアクセスできます
args1
はarguments[0]
、args2
はarguments[1]
のように順に対応しています
自身を呼び出す場合は$0
と記述します - 戻り値
script
内でreturn
した以下に該当する値 (それ以外はnull)- 文字列、数値
- エレメント ([[elementオブジェクト]]として返ります) ※0.8.4から
dim elem = driver.FindElement(selector)
dim parent = elem.ExecuteScript("return $0.parentElement;") // 自分自身は$0
print parent.GetProperty("id") // 親要素のidを取得
引数の渡し方
dim element = driver.FindElement(selector)
// 引数はargumentsで得られる
element.ExecuteScript("$0.value = arguments[0];", "にゃーん")
print element.ExecuteScript("return $0.value;") // にゃーん
戻り値 = element.raw()
WebDriverが返す元々のJavaScriptオブジェクトを得る
- 戻り値
jsオブジェクト
[[WebDriverOptionオブジェクト]]をそのまま渡せるようになりました
call UwscWebDriver.uws
opt = WebDriver.Option("chrome")
opt.args.add("headless") // 起動オプション(args)にheadlessを追加
// ヘッドレスモードで起動
headless = WebDriver.Chrome(9515, opt)
call UwscWebDriver.uws
opt = WebDriver.Option("chrome")
opt.args.add("headless") // 起動オプション(args)にheadlessを追加
// ヘッドレスモードで起動
headless = WebDriver.Chrome(9515, opt.toString())
call UwscWebDriver.uws
textblock capabilities_headless
{
"capabilities": {
"firstMatch": [ {
"browserName": "chrome",
"goog:chromeOptions": {
"args": [ "headless", "disable-gpu" ]
}
} ]
},
"desiredCapabilities": {
"browserName": "chrome",
"goog:chromeOptions": {
"args": [ "headless", "disable-gpu" ]
}
}
}
endtextblock
driver = WebDriver.Start(Webdriver.Chrome, 9515, capabilities_headless)
[[WebDriverOptionオブジェクト]]をそのまま渡せるようになりました
call UwscWebDriver.uws
opt = WebDriver.Option("edge")
opt.args.add("headless") // 起動オプション(args)にheadlessを追加
// ヘッドレスモードで起動
headless = WebDriver.Edge(9515, opt)
call UwscWebDriver.uws
opt = WebDriver.Option("edge")
opt.args.add("headless") // 起動オプション(args)にheadlessを追加
// ヘッドレスモードで起動
headless = WebDriver.Edge(9515, opt.toString())
起動オプションにheadless
を渡します
call UwscWebDriver
driver = WebDriver.Edge(9515, MsEdgeHeadlesCapabilities)
// 見えてはいないけど存在はしている
msgbox(driver.GetBrowserName())
driver.Close()
textblock MsEdgeHeadlesCapabilities
{
"capabilities": {
"alwaysMatch": {
"browserName": "msedge",
"ms:edgeOptions": {
"args": [
"headless"
]
}
}
}
}
endtextblock
driver.FindElementに渡すcssセレクタを生成します
builder = SelectorBuilder.New()
変数名 | 型 | 種別 | 説明 |
---|---|---|---|
builder | SelectorBuilderオブジェクト | 戻り値 | SelectorBuilderオブジェクトの新しいインスタンスを返します |
- SelectorBuilderオブジェクトの各メソッド名は大文字小文字を問いません
- オブジェクト自身を返すメソッドはメソッドチェーンが可能です
タグ名を指定する
builder = builder.Tag(タグ名)
変数名 | 型 | 種別 | 説明 |
---|---|---|---|
タグ名 | 文字列 | 必須 | タグ名を指定します (例: div , input ) |
builder | SelectorBuilder | 戻り値 | SelectorBuilderオブジェクト自身を返します |
idを指定する
builder = builder.Id(id)
変数名 | 型 | 種別 | 説明 |
---|---|---|---|
id | 文字列 | 必須 | id属性を指定します |
builder | SelectorBuilder | 戻り値 | SelectorBuilderオブジェクト自身を返します |
クラス名を指定する
builder = builder.ClassName(クラス名)
変数名 | 型 | 種別 | 説明 |
---|---|---|---|
クラス名 | 文字列 | 必須 | クラス名を指定します |
builder | SelectorBuilder | 戻り値 | SelectorBuilderオブジェクト自身を返します |
属性とその値を指定する
builder = builder.Attribute(属性, 値)
変数名 | 型 | 種別 | 説明 |
---|---|---|---|
属性 | 文字列 | 必須 | 属性名を指定します |
値 | 文字列 | 必須 | 属性値を指定します |
builder | SelectorBuilder | 戻り値 | SelectorBuilderオブジェクト自身を返します |
子孫セレクタを返す (
で結合される)
builder = builder.Descendant()
変数名 | 型 | 種別 | 説明 |
---|---|---|---|
builder | SelectorBuilder | 戻り値 | 子孫セレクタとなる新たなSelectorBuilderオブジェクト |
NextSibling
子セレクタを返す (>
で結合される)
builder = builder.Child()
変数名 | 型 | 種別 | 説明 |
---|---|---|---|
builder | SelectorBuilder | 戻り値 | 子セレクタとなる新たなSelectorBuilderオブジェクト |
隣接セレクタを返す (+
で結合される)
builder = builder.NextSibling()
変数名 | 型 | 種別 | 説明 |
---|---|---|---|
builder | SelectorBuilder | 戻り値 | 隣接セレクタとなる新たなSelectorBuilderオブジェクト |
CSSセレクタを生成します
セレクタ = builder.Build()
セレクタ = builder.ToString()
変数名 | 型 | 種別 | 説明 |
---|---|---|---|
セレクタ | 文字列 | 戻り値 | 生成されたCSSセレクタ |
builder = SelectorBuilder.new() // SelectorBuilderオブジェクトのインスタンスを新規作成
// SelectorBuilderの各メソッドは自身を返すため、基本はメソッドチェーンで実行する
selector = builder.tag("input")_
.attribute("type", "text")_
.attribute("name", "q")_
.classname("gLFyf")_
.classname("gsfi")_
.build() // セレクタ文字列を生成
print selector // input.gLFyf.gsfi[type="text"][name="q"]
// FindElementに渡す場合SelectorBuilderオブジェクトのままでもOK
builder = SelectorBuilder.new()
selector = builder.id("foo").classname("bar").classname("baz")
elem = driver.FindElement(selector) // OK
elem = driver.FindElement(selector.build()) // 文字列にしても良い
// 結合セレクタ例
// <div id="parent">
// <span name="child1">
// <span name="child2">
// </div>
builder = SelectorBuilder.new()
parent = builder.tag("div").id("parent")
print parent.build() // div#parent
print parent.child().tag("span").build() // div#parent > span
print parent.child().tag("span").nextSibling().tag("span").build() // div#parent > span + span
- WebDriverDownload.MsEdge
- WebDriverDownload.ChromiumEdge (互換性のため)
- WebDriverDownload.Chrome
- WebDriverDownload.Firefox
- WebDriverDownload.Dialog
- WebDriverDownload.SetDownloadDir
戻り値 = WebDriverDownload.MsEdge([major, dir])
戻り値 = WebDriverDownload.ChromiumEdge([major, dir])
新MS Edge(Chromium Edge)用のWebdriverをダウンロードします
- major (省略可)
ダウンロードするmsedgedriverのメジャーバージョン
例: 91.0.864.48 であれば 91
省略時はその時点での最新版(Stable Channel)をダウンロードします - dir (省略可)
保存先フォルダを指定する
デフォルトはカレントディレクトリまたはSetDownloadDir()
で指定したフォルダ - 戻り値
- 成功時
msedgedriverのバージョン - 失敗時
EMPTY
- 成功時
戻り値 = WebDriverDownload.Chrome([major, dir])
chromedriverをダウンロードします
- major (省略可)
ダウンロードするchromedriverのメジャーバージョン
例: 91.0.4472.101 であれば 91
省略時はその時点での最新版をダウンロードします - dir (省略可)
保存先フォルダを指定する
デフォルトはカレントディレクトリまたはSetDownloadDir()
で指定したフォルダ - 戻り値
- 成功時
chromedriverのバージョン - 失敗時
EMPTY
- 成功時
戻り値 = WebDriverDownload.Firefox(bit[, dir])
geckodriverをダウンロードします
- bit
32
または64
を指定
操作するFirefoxに合わせる - dir (省略可)
保存先フォルダを指定する デフォルトはカレントディレクトリまたはSetDownloadDir()
で指定したフォルダ - 戻り値
- 成功時
geckodriverのバージョン - 失敗時
EMPTY
- 成功時
戻り値 = WebDriverDownload.Dialog([dir])
GUIを操作しwebdriverのダウンロードを行います
- dir (省略可)
保存先フォルダを指定する
デフォルトはカレントディレクトリまたはSetDownloadDir()
で指定したフォルダ - 戻り値
- 成功時
有効化またはダウンロードしたwebdriverのバージョン - 失敗時
EMPTY
- 成功時
WebDriverDownload.SetDownloadDir(dir [, gui])
- dir
デフォルトのダウンロードフォルダを指定 - gui (省略可)
TRUE
にするとGUIから選択
[[WebDriver.Option()|WebDriverモジュール#WebDriver.Option]]が返すオブジェクト
WebDriver.Chrome()
などのoption引数に使えます
以下に対応しています
- UPPERCASE
- lowercase
- PascalCase
opt = WebDriver.Option("chrome")
// 以下のような書式はOK
opt.args.Add("foo") // lowercase PascalCase
opt.ARGS.add("bar") // UPPERCASE lowercase
opt.Args.REMOVE("foo") // PascalCase UPPERCASE
// 以下はNG
opt.ArGs.adD("baz") // 単語の節目ではないPascalCaseやcamelCase
ブラウザの起動オプションを指定するためのオブジェクト
以下のメソッドを持ちます
戻り値 = option.args.add(起動オプション)
- 起動オプション
ブラウザのexe実行時に付与する起動オプション文字列
詳細についてはそれぞれのブラウザのドキュメントを参照してください - 戻り値
- argsに登録された起動オプションの数
戻り値 = option.args.remove(起動オプション)
- 起動オプション
登録済みの起動オプションから一致するものを削除する - 戻り値
- argsに登録された起動オプションの数
args以外のオプションを追加または変更できます
opt.setOption(オプション名, 値)
- オプション名
追加するオプション名 - 値
オプションにセットする値
json文字列をjsオブジェクトに変換します
setOption
でオブジェクトを渡す必要がある場合に使用します
opt.eval(json文字列)
- json文字列
オブジェクトに変換したいjsonを示す文字列
opt = WebDriver.Option("chrome") // chrome, edge, firefox のいずれかを指定
opt.args.add("headless") // 起動オプション(args)にheadlessを追加
// ヘッドレスモードで起動
headless = WebDriver.Chrome(9515, opt)
opt = WebDriver.Option("msedge")
// msegdeのパスを指定する
opt.setOption("binary", "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe")
driver = WebDriver.Edge(9515, opt)
- WebDriver.Version
- WebDriver.HideCmd
- WebDriver.Option
- WebDriver.Start
- WebDriver.Remote
- WebDriver.Connect
- WebDriver.CreateJSArray
- WebDriver.GetError
- WebDriver.GetBrowserVersion
- WebDriver.GetBrowserID
- WebDriver.SetHttpRequestProgID
- WebDriver.SetScriptControlTimeout
戻り値 = WebDriver.Version()
モジュールのバージョンを得ます
- 戻り値
モジュールのバージョン
WebDriver.HideCmd()
WebDriver.Start()
実行時にコマンドプロンプトの画面表示されなくなります
(WebDriver.Start()
の前に呼ぶ必要があります)
スクリプト終了後もコマンドプロンプトは非表示のまま残ります
不要な場合はタスクマネージャ等で終了させてください
戻り値 = WebDriver.Option(browser)
- browser
- ブラウザ種別を示す文字列
"chrome"
"edge"
"msedge"
"firefox"
- ブラウザ種別を示す文字列
- 戻り値
- [[WebDriverOptionオブジェクト]]
戻り値 = WebDriver.Start(driverpath[, port[, option]])
WebDriverとブラウザを起動してwebdriverオブジェクトを取得します
取得に失敗した場合はスクリプトを強制終了します
事前に WebDriver.HideCmd()
を実行していない場合、コマンドプロンプトの画面が表示されます
- driverpath
ChromeならWebDriver.Chrome
新MS EdgeならWebDriver.Edge
またはWebDriver.ChromiumEdge
旧MS EdgeならWebDriver.EdgeLegacy
FirefoxならWebDriver.Firefox
を指定します
それ以外のWebDriverの場合はexeのフルパスを指定してください - port
省略可能
WebDriverの待受ポート番号を指定します
デフォルトは9515
です - option (省略可)
webdriverに渡すオプションの内容を記述したjson文字列
またはWebDriverOption
オブジェクト - 戻り値
- 成功時
[[driverオブジェクト]] - 失敗時
null (警告を無視した場合)
- 成功時
driverオブジェクトが取得できなかった場合の警告を抑制するかどうか
FALSE
: driverオブジェクトが取得できない場合に警告を表示します (デフォルト)TRUE
: driverオブジェクトが取得できない場合に警告をしません
WebDriver.SuppressNullError = FALSE // 警告を出す
WebDriver.SuppressNullError = TRUE // 警告を出さない
戻り値 = WebDriver.Chrome([port[, option]])
戻り値 = WebDriver.Edge([port[, option]])
戻り値 = WebDriver.Firefox([port[, option]])
WebDriver.Start()
のブラウザ別ラッパー関数です
WebDriverとブラウザを起動し、webdriverオブジェクトを取得します
取得に失敗した場合はスクリプトを強制終了します
事前に WebDriver.HideCmd()
を実行していない場合、コマンドプロンプトの画面が表示されます
WebDriverは実行スクリプトと同じディレクトリ、または %PATH%
に配置する必要があります
- port
省略可能
WebDriverの待受ポート番号を指定します
デフォルトは9515
です - option (省略可)
webdriverに渡すオプションの内容を記述したjson文字列
またはWebDriverOption
オブジェクト - 戻り値
- 成功時
[[driverオブジェクト]] - 失敗時
null (警告を無視した場合)
- 成功時
戻り値 = WebDriver.Remote(remotehost, port, capabilities)
selenium-server-standalone.jar
を実行しているPC上のWebDriverに接続します
- remotehost
リモートPCのホスト名またはIPアドレス
ローカルでselenium-server-standalone.jar
を実行している場合はlocalhost
- port
Selenium standalone serverの待ち受けポートです
デフォルトは4444
のようです - capabilities
capabilitiesのjson文字列
以下の定数が定義されています
Edge:WebDriver.RemoteEdgeCapabilities
Chrome:WebDriver.RemoteChromeCapabilities
- 戻り値
- 成功時
[[driverオブジェクト]] - 失敗時
null
- 成功時
remotedriver = WebDriver.Remote("192.168.x.x", "4444", WebDriver.RemoteChromeCapabilities)
戻り値 = WebDriver.Connect(session)
以前のwebdriverセッションを再利用し、起動済みのブラウザを再び操作できるようにします
- session
webdriver.GetSession()
で取得したセッション情報 - 戻り値
- 成功時
[[driverオブジェクト]] - 失敗時
null
- 成功時
戻り値 = WebDriver.CreateJSArray()
JavaScriptの配列を得ます
push()
で要素を追加できます
- 戻り値
空のJavaScript配列
arr = WebDriver.CreateJSArray()
arr.push("hoge")
arr.push("fuga")
arr.push("piyo")
戻り値 = WebDriver.GetError()
webdriverオブジェクト
やwebelementオブジェクト
起因のCOMエラーが発生した際のエラー詳細を得ます
- 戻り値
エラー詳細(文字列)
戻り値 = WebDriver.GetBrowserVersion(ブラウザ定数)
ブラウザのバージョンを取得する
- ブラウザ定数
- 以下の定数のいずれかを指定
- WebDriver.Chrome
- WebDriver.Firefox
- WebDriver.Edge
- またはexe名(文字列)
- 以下の定数のいずれかを指定
- 戻り値
- 成功時
ブラウザバージョン (文字列) - 失敗時
EMPTY
- 成功時
戻り値 = WebDriver.GetBrowserVersion(driver)
- driver
- driverオブジェクト
- 戻り値
- ブラウザのウィンドウID (失敗時-1)
WebDriver.SetHttpRequestProgID(progid)
HTTPリクエストを行うCOMコンポーネントを変更する
デフォルトは WinHttp.WinHttpRequest.5.1
不正なProgIDを指定した場合は実行時にエラーになります
- progid
- HTTPリクエストを行うCOMコンポーネントのProgID
- 例
Microsoft.XMLHTTP
Microsoft.XMLHTTP.1.0
Msxml2.ServerXMLHTTP
Msxml2.ServerXMLHTTP.3.0
Msxml2.ServerXMLHTTP.6.0
Msxml2.XMLHTTP
Msxml2.XMLHTTP.3.0
Msxml2.XMLHTTP.6.0
WinHttp.WinHttpRequest.5.1
- 例
- HTTPリクエストを行うCOMコンポーネントのProgID
// 0.8.7以前で使われていたMsxml2.XMLHTTPに戻す
WebDriver.SetHttpRequestProgID("Msxml2.XMLHTTP")
// Msxml2.XMLHTTP 6.0にする
WebDriver.SetHttpRequestProgID("Msxml2.XMLHTTP.6.0")
ScriptControlのタイムアウト時間を設定する
戻り値 = WebDriver.SetScriptControlTimeout(タイムアウト秒)
- タイムアウト秒
- タイムアウトするまでの秒数 (1以上)
- -1を指定するとタイムアウトしない
- 戻り値
- 変更前のタイムアウト時間 (秒)
input[type="file"]
に対して直接ファイルパスを指定できます
クリックしてファイル選択ダイアログを操作する必要はありません
file = driver.FindElement("input[type=<#DBL>file<#DBL>]")
// SetValue()でファイルパスを入力できます
// 存在しないファイルのパスを指定した場合はなにも入力されません
file.SetValue("C:\file_to_upload.txt")
0.2.0から
UwscWebDriver
を実行する環境とは異なるPC上のブラウザを操作する方法です
対象となるPCはWindows以外(例:mac,Linux)でも大丈夫です
リモートPCにて以下をインストールします
- JRE
Java実行環境(30億台のデバイスで動いているやつ)です - Selenium StandAlone Server
ここのSelenium Standalone Server
からダウンロードしてjarファイルを任意のディレクトリに配置してください - WebDriver
任意のWebDriverをPATHの通ったディレクトリに配置してください - ブラウザ
操作対象のブラウザ
導入例: WindowsでChromeを使う場合 「管理者として実行」したPowerShellで以下を実行
Install-Package -ProviderName Chocolatier -Name javaruntime,selenium,googlechrome,chromedriver -Force
# Selenium StandAlone ServerはC:\tools\seleniumに配置される
※ Chocolatierが導入されていない場合は事前に以下を実行してください
Install-PackageProvider Chocolatier -Force
Import-Module Chocolatier
対象PCにてSelenium StandAlone Server
を実行します
java -jar C:\tools\selenium\selenium-server-standalone.jar
driverオブジェクトは以下で取得できます
その後は同様に操作できます
remotedriver = WebDriver.Remote("192.168.x.x", "4444", WebDriver.RemoteChromeCapabilities)
ただしEdgeではExecuteScript
と別タブ関連のメソッドが機能しませんでした (Windows 10 1809)
0.3.0 から
以前起動したブラウザをスクリプト再実行時に操作できるようにします
以下の条件を満たす場合に使用できます
- 前回のスクリプト実行でWebDriver.Start()でブラウザを起動している
- 前回のスクリプト実行でdriver.Close()していない
- driver.Close()以外でブラウザを終了していない (例: 手動で閉じる
- webdriverを終了していない
あえて開きっぱなしにしておいたブラウザを再度操作できるようにする仕組みです
スクリプトの手直しをしつつ開いたブラウザを使いまわしたい場合などに便利
- セッション情報を保存
- セッション情報を元にwebdriverオブジェクトを得る
セッション情報の取得
session = driver.GetSession()
セッション情報からwebdriverオブジェクトを取得
driver = WebDriver.Connect(session)
call UwscWebDriver.uws
driverpath = WebDriver.Chrome
// 保存したセッション情報を読み取る
session = readini("WebDriver", "session")
if length(session) = 0 then
// session情報が保存されていない場合はブラウザを起動する
driver = WebDriver.Start(driverpath)
driver.Navigate("http://example.com/")
Alert(driver, "初回起動です")
if msgbox("session情報を保存しますか?", BTN_YES or BTN_CANCEL) = BTN_YES then
writeini("WebDriver", "session", driver.GetSession())
endif
else
// session情報が保存されている場合は再接続を試みる
driver = WebDriver.Connect(session)
if driver = NULL then
msgbox("以前のセッションがCloseされた、ブラウザが閉じられた、<#CR>またはWebDriverが起動していないため再接続できません")
else
Alert(driver, "再接続しました")
endif
if driver <> null then
if msgbox("ブラウザを閉じてsession情報を破棄しますか?", BTN_YES or BTN_CANCEL) = BTN_YES then
driver.Close()
deleteini("WebDriver", "session")
endif
endif
endif
procedure Alert(driver, text)
args = WebDriver.CreateJSArray()
args.push(text)
driver.ExecuteScript("alert(arguments[0]);", args)
fend
C:\UwscWebDriver\download\
にダウンロードしたい場合
call UwscWebDriver.uws
// capabilitiesでダウンロードフォルダを指定します
textblock capa
{
"capabilities": {
"alwaysMatch": {
"browserName": "msedge",
"ms:edgeOptions": {
"args": [],
"prefs": {
"download": {
"default_directory": "C:\\UwscWebDriver\\download\\",
"prompt_for_download": false
}
}
}
}
}
}
endtextblock
// jsonなので \ は \\ のようにエスケープする必要があります
// capabilitiesを渡して起動
driver = WebDriver.Edge(9515, capa)
// 対象エレメントをクリックしたらダウンロードが始まる場合はそのようにする
download = driver.FindElement(selector_to_element)
download.click()
// ダウンロード完了を待つ
sleep(5)
// ファイルダウンロード完了を検出する仕組みがないので適当にsleepさせてください
ダウンロードファイルのURLが予め分かっている場合はnavigate()
でもダウンロードできます
driver = WebDriver.Edge(9515, capa)
driver.navigate(file_url)
sleep(5)
自動テストソフトウェアによって制御されています
のinfobarを消す方法
textblock remove_infobar
{
"capabilities": {
"alwaysMatch": {
"browserName": "chrome",
"goog:chromeOptions": {
"args": [],
"excludeSwitches": [
"enable-automation"
]
}
}
}
}
endtextblock
driver = WebDriver.Chrome(9515, remove_infobar)
textblock remove_infobar
{
"capabilities": {
"alwaysMatch": {
"browserName": "msedge",
"ms:edgeOptions": {
"args": [],
"excludeSwitches": [
"enable-automation"
]
}
}
}
}
endtextblock
driver = WebDriver.Edge(9515, remove_infobar)