51
Microsoft ExcelWebブラウザ (Selenium WebDriver)動かした話 ひろくんだよん

Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

  • Upload
    -

  • View
    1.323

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

Microsoft ExcelでWebブラウザ

(Selenium WebDriver)を動かした話

ひろくんだよん

Page 2: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

Seleniumとは?

• 原子番号34の元素

• 元素記号はSe

• 第16族元素

–酸素と同族

–ハロゲンの隣

• 灰色セレン

–金属セレン

–六方晶系

–融点は217.4℃

• 赤色セレン

–単斜晶系

Page 3: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

ではなくて

Page 4: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

Seleniumとは?

http://docs.seleniumhq.org/

• Webベースアプリケーション用テスト自動化ツール

• ライセンスはApache 2.0 License

Page 5: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

Selenium WebDriverhttp://docs.seleniumhq.org/projects/webdriver/

• プログラムからWebブラウザ制御

• 制御可能ブラウザ

– Mozilla Firefox, Google Chrome(Linux, Windows, MacOS, Android), Internet Explorer, Safari, Edge

• 使用可能言語

– Java, Ruby, Python, C#, Javascript(Node.js)など

• OS

– Linux, MacOS, Windowsなど

Page 6: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

Selenium WebDriverhttp://docs.seleniumhq.org/projects/webdriver/

• プログラムからWebブラウザ制御

• 制御可能ブラウザ

– Mozilla Firefox, Google Chrome(Linux, Windows, MacOS, Android), Internet Explorer, Safari, Edge

• 使用可能言語

– Java, Ruby, Python, C#, Javascript(Node.js)など

• OS

– Linux, MacOS, Windowsなど

Page 7: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

SeleniumClient

FirefoxDriver

ChromeDriver

IEDriver

制御

応答

制御

応答

制御

応答

制御

応答

制御

応答

大まかな仕組み

MicrosoftEdge

Driver

制御

応答

Page 8: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

実はPowerShellからも動かせる

Page 9: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

C#用Selenium

Library

FirefoxDriver

ChromeDriver

IEDriver

制御

応答

制御

応答

制御

応答

制御

応答

制御

応答

大まかな方法

MicrosoftEdge

Driver

制御

応答

https://www.slideshare.net/hirofumitouhei/powershellwebselenium-webdriverよりhttps://github.com/hirokundayon/edobarai.git

Page 10: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

ふと思った

Page 11: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

PowerShellからも

動かせるなら

Page 12: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

Microsoft Excelからも

動かせるのでは?

Page 13: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

C#用Selenium

Library

FirefoxDriver

ChromeDriver

IEDriver

制御

応答

制御

応答

制御

応答

制御

応答

制御

応答

大まかな方法

MicrosoftEdge

Driver

制御

応答

https://www.slideshare.net/hirofumitouhei/powershellwebselenium-webdriverより

Page 14: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

構想した手順

1. Selenium Client & WebDriver Language Bindings から C#用ファイルをとってくる。

2. 任意のフォルダにC#用ファイルを置く。

3. Microsoft Excel VBAで呼び出し部分を宣言

4. Microsoft Excel VBAスクリプトを書く。

Page 15: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

命名

PAIPAI

Page 16: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

魔法少女ちゅうかなぱいぱい東映制作1989年1月15日から同年7月9日までフジテレビ系列で放送

©石森プロ、東映

Page 17: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

だが挫折orz

Page 18: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

挫折の理由

1. Selenium Client & WebDriver Language Bindings から C#用ファイルをとってくる。

2. 任意のフォルダにC#用ファイルを置く。

3. Microsoft Excel VBAで呼び出し部分を宣言

4. Microsoft Excel VBAスクリプトを書く。

赤字の部分がよくわからなかった。

情弱なので。

Page 19: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

だが思いだした

Page 20: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

以前、こういうのを行なった

Page 21: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

curlをつかって

http://www.suruga-ya.jp/product/detail/980001420000より

Page 22: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

SeleniumServer

bashでWebブラウザを動かした

ChromeDriver

HTTPリクエスト

応答応答

応答(JSON)

HTTPリクエスト

応答(JSON)

https://www.slideshare.net/hirofumitouhei/bashwebselenium-webdriverよりhttps://github.com/hirokundayon/Emily.git

Page 23: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

Visual Basic でも出来る事

• HTTPリクエストを投げて応答を処理するServerXMLHTTPhttps://msdn.microsoft.com/ja-jp/library/ms766431(v=vs.85).aspx

• プログラムを実行Shell関数:PIDも取得できるhttps://msdn.microsoft.com/ja-jp/library/xe736fyk(v=vs.90).aspx

• PIDを指定してプログラムを停止(後述)

Page 24: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

という事は

Page 25: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

次の手順で処理可能

1. Selenium Standalone Server を起動

2. Webブラウザを自動実行i. Selenium Standalone Serverに

HTTPリクエストを投げる。

ii. 応答を受けて処理する。

3. Selenium Standalone Server を停止

Page 26: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

命名

IPANEMA

Page 27: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

魔法少女ちゅうかないぱねま東映制作1989年7月23日から同年12月24日までフジテレビ系列で放送

©石森プロ、東映

ぱいぱいよりも技能が未熟

Page 28: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

魔法の呪文

リンパラ、

イパネマ、

シャオシャオパイ

Page 29: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

Selenium Server の起動

Dim pid As Integer

pid =Shell(

"java -Dwebdriver.chrome.driver=/path/to/chromedriver-jar selenium-server-standalone-X.X.X.jar")

• 赤字部分は一行で書く。

• /path/to/chromedriverは適宜指定。– 他のWebブラウザ用ドライバーも適宜指定

• pid(プロセスID)は後で停止する時に使用。

• jarファイル、chromedriverなどの置き場所http://www.seleniumhq.org/download/

Page 30: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

HTTP リクエストを処理するServerXMLHTTPを使用https://msdn.microsoft.com/ja-jp/library/ms766431(v=vs.85).aspx

Function useAPI(_ByVal url As Variant, _ByVal method As String, _ByVal json As String) As String

Dim objHTTP As Object

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")

objHTTP.Open method, url, False

objHTTP.setRequestHeader "Content-type", "application/json"

objHTTP.send json

useAPI = objHTTP.responseText

Set objHTTP = Nothing

End Function

Page 31: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

Selenium WebDriverのAPI (一部)メソッド URIのテンプレート コマンド

POST /session 新しくセッションを作る

POST /session/{session id}/url 指定したURLへ飛ぶ

GET /session/{session id}/title タイトルを得る

POST /session/{session id}/element 要素を見つける

POST /session/{session id}/element/{element id}/sendKeys

指定した要素にキー入力を送る

POST /session/{session id}/element/{element id}/click

指定した要素をクリックする

https://w3c.github.io/webdriver/webdriver-spec.htmlより

Page 32: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

Webブラウザ(Google Chrome)起動

• メソッドPOST

• JSON

{"desiredCapabilities":

{"browserName":“chrome”},

"requiredCapabilities":{}}

• URLhttp://localhost:4444/wd/hub/session

Page 33: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

Webブラウザ(Internet Explorer)起動

• メソッドPOST

• JSON{“desiredCapabilities”:

{"browserName":“internet explorer”},"requiredCapabilities":{}}

• URLhttp://localhost:4444/wd/hub/session

Page 34: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

Webブラウザ(Mozilla Firefox)起動

• メソッドPOST

• JSON{"desiredCapabilities":

{"browserName":"firefox”},"requiredCapabilities":{}}

• URLhttp://localhost:4444/wd/hub/session

Page 35: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

Webブラウザ(Microsoft Edge)起動

• メソッドPOST

• JSON{"desiredCapabilities":

{"browserName":“MicrosoftEdge”},"requiredCapabilities":{}}

• URLhttp://localhost:4444/wd/hub/session

Page 36: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

Webブラウザ(Google Chrome on Android)起動

• メソッドPOST

• JSON{"desiredCapabilities":

{"browserName":"chrome“, “chromeOptions":

{"androidPackage": "com.android.chrome"}},"requiredCapabilities":{}}

• URLhttp://localhost:4444/wd/hub/session

Page 37: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

Selenium WebDriverのAPIの応答例

{

"state": null,

"sessionId": "45314279-a985-4a7e-aee1-

30582a4f9c2a",

"hCode": 682306787,

"value": {

"applicationCacheEnabled": true,

"rotatable": false,

"handlesAlerts": true,

"databaseEnabled": true,

"version": "46.0.1",

"platform": "WINDOWS",

"nativeEvents": false,

"acceptSslCerts": true,

"webdriver.remote.sessionid": "45314279-a985-4a7e-aee1-

30582a4f9c2a",

"webStorageEnabled": true,

"locationContextEnabled": true,

"browserName": "firefox",

"takesScreenshot": true,

"javascriptEnabled": true,

"cssSelectorsEnabled": true

},

"class": "org.openqa.selenium.remote.

Response",

"status": 0

}

Page 38: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

Googleのページへ飛ぶ

• メソッドPOST

• JSON{"url": ”http://www.google.co.jp”}

• URL

“http://localhost:4444/wd/hub/session/“ _& SESSION_ID & "/url”

Page 39: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

Googleの検索窓を探す

• メソッドPOST

• JSON{“using”:”‘name’”,”value”:“q”}

• URLhttp://localhost:4444/wd/hub/session/ _

& SESSION_ID & "/element”

Page 40: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

応答例{

"state": "success",

“sessionId”:"da990f64-671f-4b4e-b4f9-af3363fb54e8",

"hCode": 1209818291,

"value": {

"ELEMENT": "0"

},

"class": "org.openqa.selenium.remote.Response",

"status": 0

}

部品が見つかった場合は success

部品のID

Page 41: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

検索

• メソッドPOST

• JSON{“value”:[“OSC 名古屋 2012 レポート\n"]}

• URLhttp://localhost:4444/wd/hub/session/ _

& SESSION_ID & _“/element/” & ELEMENT_ID & “/value”

Page 42: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

検索結果からリンクを探す• メソッド

POST

• JSON{"using":"partial link text”,”value”:“OSS支える!”}

• URL”http://localhost:4444/wd/hub/session/” _

& SESSION_ID & ”/element”

Page 43: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

リンクをクリック

• メソッドPOST

• JSONなし

• URL”http://localhost:4444/wd/hub/session/” _

& SESSION_ID & ”/element/” _& ELEMENT_ID & “/click”

Page 44: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

Selenium Server の停止Dim strComputer As String

Dim objWMIService

Dim colProcessList

Dim objProcess

strComputer = "."

Set objWMIService = _

getObject(“winmgmts:\\” & strComputer & “\root\cimv2”)

Set colProcessList = objWMIService.ExecQuery _

("Select * from Win32_Process Where ProcessID = " _

& CStr(pid))

For Each objProcess In colProcessList

objProcess.Terminate

Next

Page 45: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

こんな感じで作ります

Page 46: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

必要なもの

• Microsoft OfficeMicrosoft Excel 2013(32bit版) で動作検証

• Java Runtime EnvironmentJava Runtime Environment 1.8.0 u131 で動作検証

• Selenium Standalone ServerSelenium Standalone Server V3.4.0 で動作検証

Page 47: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

ここで実演

Page 48: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

実演内容

次の処理を自動実行

1. Webブラウザ起動

2. Googleで「OSC 名古屋 2012 レポート」を検索

3. OSC2012 Nagoya のレポートを表示させるhttps://www.ospn.jp/press/20120601osc2012-nagoya-report.html

4. メモリーカードエラー写真をクリック

5. さらにクリックして拡大表示

Page 49: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

Excel でGoogle Chromeを操作

Page 50: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

まとめ

Microsoft ExcelでWebブラウザ(Selenium WebDriver)を操作可能

• Selenium Serverを起動する。

• ServerXMLHTTPでHTTPリクエストをSelenium Serverへ投げる。

• JSON形式の応答を加工して処理を続ける。

Page 51: Microsoft ExcelでWebブラウザ(Selenium WebDriver)を動かした話

おしまい(^.^)/~~~