質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Microsoft Edge

Microsoft Edgeは、マイクロソフト社が開発する新しいWebブラウザです。Windows 10から標準搭載されており、Internet Explorerとは違うレンダリングエンジンが採用されています。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

7936閲覧

ExcelVBAでJavaScriptを動作させたいのですが、動きません。

umai29

総合スコア19

Microsoft Edge

Microsoft Edgeは、マイクロソフト社が開発する新しいWebブラウザです。Windows 10から標準搭載されており、Internet Explorerとは違うレンダリングエンジンが採用されています。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/06/16 12:48

ExcelVBAでWebスクレイピングをしようと思っておりまして、ブラウザはIEではなくMicrosoft Edgeを想定しています。
すでにSeleniumBasicをインストールしておりまして、あるサイトにおいてプルダウンメニューやテキストボックスにデータを入力し、ボタンを押すというところをプログラムの中で行おうとしています。

ExcelVBA

1Option Explicit 2 3Public Sub WebScraping() 4 'Webドライバ関連 5 Dim pid As Long 6 Dim pno As Long: pno = 17556 7 8 'JavaScript関連 9 Dim js As Object 10 Set js = CreateObject("ScriptControl") 11 js.Language = "JScript" 12 13 'Webドライバ起動 14 pid = StartEdgeDriver(PortNo:=pno) 15 If pid = 0 Then Exit Sub 16 17 ' ブラウザ(MicrosoftEdgeにて処理) 18 With CreateObject("Selenium.WebDriver") 19 20 'MicrosoftEdge呼出し 21 .StartRemotely "http://localhost:" & pno & "/", "MicrosoftEdge" 22 23 'URLを指定 24 .Get "目的のサイトURL" 25 26 Dim func As Object 27 Set func = js.Eval("(function () { document.getElementByClass('mat-select-value').selectedIndex = 13; });") 28 29 Debug.Print func 30 End With 31 32 TerminateEdgeDriver pid 33 34

まずは、プルダウンメニューのクラス名を指定し、その値を取得してDebug.Printで表示しようとしているのですが、以下のエラーが起こります。

実行時エラー'424':
オブジェクトが必要です。

ブラウザ(Microsoft Edge)は起動され、目的のサイト表示まではされるのですが、以降の処理でエラーが起きてしまいます。
デバッグをしたところ、上記プログラムの「Set func~」の行でエラーが起きていることがわかります。オブジェクトはその上の「Dim func As Object」と宣言しているのですが、これだけでは無効となるようです。

どのようにすれば、オブジェクトが有効となるのでしょうか。
また、JavaScriptもあまり詳しくはないので、Set func の右についても誤りがあるかもしれませんので、そのあたりも詳しく教えていただけないでしょうか。

JavaScriptを使わずに、VBAからプルダウンメニューやテキストボックス、ボタンなどを操作できる方法がありましたら、そちらも教えていただけるとありがたいです。

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

SeleniumBasic は触ったことは無いですが、明らかにおかしい箇所について。

vba

1 Dim js As Object 2 Set js = CreateObject("ScriptControl")

上記のものは今回やりたいことには一切関係ないはずです。

「VBAでJavaScriptを使う」ということで惑わされてしまったのだと思われますが、
ScriptControl独立したVBScript/JScript実行環境を生成するものです。
ブラウザ側とは一切の紐づけが無いため、中で何をしようがブラウザには一切の影響はありません。

【2019年6月版】SeleniumBasicでMicrosoft Edgeを操作してみました。 | 初心者備忘録

また、上記サイトのコードを見るとgetElementsByClassName的なものはSeleniumBasic側で持っており、多少のことはJavaScript無しでもできそうな印象です。

投稿2019/06/17 13:38

imihito

総合スコア2166

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

umai29

2019/06/18 15:26

ご回答ありがとうございます。 Webスクレイピングは初めてで、わけもわからず使用しておりましたが、ScriptControlは独立したJScript/VBScript実行環境を生成するもので、ブラウザとの紐づけがないということを初めて知り、勉強になりました。 その後自分でやってみたのですが、とりあえずはJavaScriptを使わずにFindElementByIdメソッドで、プルダウンメニューの選択やテキストボックスへの入力はできました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問