【VBA×Selenium】指定の場所(Xpath)までスクロールする方法について

みなさんこんにちは。

Webスクレピングで特定のボタンをクリックする際、

Xpathを正しくしているにもかかわらず、クリック時にエラーになるときはありませんか?

実際デバッグしながら処理を確認すると、

画面上にそのボタンが表示される個所までスクロールすると

クリック動作が正常に行われ、

画面上に表示されていない状態だとエラーになる現象が稀に発生します。

今回は、指定したXpathの場所までスクロールする方法についてご紹介します。

この記事はこんな人におすすめ

この記事はこんな人におすすめです!

  • VBAプログラミング:初級者~中級者
  • Webスクレイピング:初級者~中級者
  • コードだけサクッと取得したい人
  • 効率の良いコードを書きたい人

といったところでしょうか。

Seleniumに関する過去の記事

Seleniumに関する小ワザやテクニック、Xpathに関する処理については過去の記事でもご紹介しております。

今回の記事を読むメリット

指定の場所(Xpath)までスクロールする方法を知るメリットは以下の通りです。

  • 予期せぬエラーの回避
  • Webスクレイピングの基本が定着する
  • 画面スクロールのコード取得

といったところでしょうか。

スクレイピングを数多く実施していると誰しもが経験擦るカベかと思います。

且つ忘れたころに直面するかと思いますので、

一度やり方を覚えてしまえばかなり有効的なスキルになるかと思います。

Web要素が画面真中になる様にスクロールするコード

JavaScriptでキャッチしたWeb要素が画面の真中に映る様にスクロールする構文を紹介します。

サンプルコードは以下の通りです。

'/////////////////////////////////////////////////////////
' 指定した場所(Xpath)を画面中央に表示する_その②
'/////////////////////////////////////////////////////////
Private Sub Scroll_Center()
    Dim elm As selenium.WebElement
    Dim drv As New ChromeDriver
    With drv
        .Get "ここに参照したいサイトのURLを入力"
        .Window.Maximize
        Set elm = .FindElementByXPath("ここに表示したい要素のXpathを入力")
        Call ScrollIntoViewCenter(elm)
        Stop
        .Quit
    End With
End Sub

'/////////////////////////////////////////////////////////
' 指定した場所(Xpath)を画面中央に表示する
'/////////////////////////////////////////////////////////
Private Function ScrollIntoViewCenter(element As WebElement)
    Const JS_SCROLL_CENTER = _
        "this.scrollIntoView(true);" & _
        "var y = (window.innerHeight - this.offsetHeight) / 2;" & _
        "if (y < 1) return;" & _
        "for (var e=this; e; e=e.parentElement) {" & _
        "  if (e.scrollTop == 0) continue;" & _
        "  var yy = Math.min(e.scrollTop, y);" & _
        "  e.scrollTop -= yy;" & _
        "  if ((y -= yy) < 1) return;" & _
        "}" & _
        "window.scrollBy(0, -y);"
  
    element.ExecuteScript JS_SCROLL_CENTER
End Function

コード解説

簡単なコード解説になります。

  • 5行目:遷移したいサイトのページを取得
  • 6行目:画面最大化
  • 7行目:FindElementByXPathでWeb要素取得
  • 8行目:ScrollIntoViewCenter関数でJavaScript構文の実行

最後に

いかがでしたでしょうか。

Seleniumを使用していると予測不能な謎エラーに遭遇することが多々あります。

ですので、しっかりマスターして基本を抑えながらと実装できると業務効率も格段に向上するかと思います。

そのきっかけとして、少しでも参考になればと思います。

開発依頼について

ココナラでWebスクレイピング開発サービスを出品しております。

自分で開発をしようと思ったけど、依頼したり、何か聞きたいことがあったりしたら

いつでもお気軽にご相談ください。

また、本ブログからご依頼いただいた方については割引特典がございますので、

ご不明点と合わせてメッセージをいただけると幸いです。

Excelにてブラウザ操作自動化ツールを作成します その作業、webスクレイピングを使って自動化しましょう!

また、Webスクレイピング以外にもWebアプリの開発サービスも出品しております。

こちらについても、本ブログからご依頼いただいた方については割引特典がございますので、

ご不明点と合わせてメッセージをいただけると幸いです。

スモールスケールのWebアプリ開発します 先ずはスモールスケールのWebアプリから始めませんか?

ご興味がある方はこちら!!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA