0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Selenium Basic VBA で Inputの valueを取得できなくなったっぽい対策。2021/6/9

Last updated at Posted at 2021-06-09

VBAマンの強い味方SeleniumBasicですが、
2021年6月はじめのChromeのアップデートにより、
どうやら element.value で Inputの中のvalue値を取得することができなくなったぽいです。

今までは
Chromedriver.findelementbyid("hoge").value
みたいにすればvalue値をとれていたのですが、無反応(というかデフォルト設定のまま)になります。
たとえば、sendkeyでInput要素に入力しても、それを.valueで取得することができません。
(だからsendkeyでちゃんと値が入ったかどうか確認できない)

しょうがないので、Input要素の中を全選択してコピーして、VBAでクリップボードから値を得る
という無茶苦茶な方法で対処することにしました。
(ChromeやChromeDriverの更新で不要になる可能性も高いです)

コード内の「Element」は他でChromedriver.findelementbyidでもしてください。
あと参照設定でMSFormsを使えるようにしておく必要があります。

Function getValuefromInput(Element)
    
    'クリップボードを空に
    Application.CutCopyMode = False
    
    With New MSForms.DataObject
        '一旦ダミー値をクリップボードに入れる
        With CreateObject("Forms.TextBox.1")
          .MultiLine = True
          .text = "|||||hogehoge|||||"
          .SelStart = 0
          .SelLength = .TextLength
          .Copy
        End With
        
        'キーボードを用意(Ctrlキーのため)
        Set Keyboards = New Keys
        
        '該当エレメントをクリックしてコピー
        Element.Click
        Element.SendKeys Keyboards.Control & "A" & "C"
        
        Driver.Wait 100
        'クリップボードの中身を取得
        .getfromClipboard
        mytext = .GetText
        
        'ダミー値のままだったら、空っぽってことで””を返す
        If mytext = "|||||hogehoge|||||" Then
            getValuefromInput = ""
        Else
            getValuefromInput = mytext
        End If
    End With
End Function
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?