その他

【解決済】window.scrollTo(0, document.body.scrollHeight)が効かなくスクロールできない[No75]

投稿日:2020年10月26日 更新日:

スポンサーリンク

通常、ブラウザ、サイトで「window.scrollTo(0, document.body.scrollHeight)」のスクリプトを実行するとスクロールしてくれます。

が、スクロールしないサイトもあります。今回はその対応策を紹介します。

window.scrollToについて

window.scrollToは絶対値指定で移動します。window.scrollTo(X,Y)の場合は横にX、縦にY動きます。X,Yの座標が同値の時は、2回目以降は動きません。

※相対値指定で移動させたい場合はwindow.scrollBy(X,Y)で可能です。この場合はX,Yが同じでも2回目以降もスクロールしてくれます。

document.body.scrollHeightについて

document.body.scrollHeightはbodyの高さです。現在bodyと認識されている縦の長さです。

スクロールすることで新しい表示領域を得るサイトの場合は、Body範囲が大きくなるのでdocument.body.scrollHeightの値も増えていきます。

スクロールできない、スクロールしない時に調べること

EdgeやChrome等のブラウザの開発者モードでConsole(コンソール)を開きます。

Chromeの場合
Edgeの場合

コンソールでJSを書くと入力候補が表示されます。途中表示されなくなってもCtrl+spaceを同時押しすると出てきてくれます。そして、別にコマンドをEnterで確定しなくてもキーボートの上下ボタンとかで選択すれば値は出てくれます。

次のコマンドを入力してスクロールされた場合で、プログラムで実行されない場合はそのプログラムコードに問題があります。

スクロールされなかったら「document.body.scrollHeight」を実行してみましょう。上手く行くサイトは次のように数字が表示されます。

スクロールされない場合は、次のようになっていると思います。document.body.scrollHeightは0になります。

あと、数値を直書きしてスクロールバーが動くかも確認しておきましょう。

解決策

document.documentElement.scrollHeightを使います。これをコンソールで実行して0以外がReturnできたらOKです。以前スクロールバーが動かなかった、スクロールできなかったサイトでも動いてくれると思います。※undefinedとなります、上手く行く時でも行かない時でも表示されます。

スポンサーリンク

おまけ:selenium basic(VBA)

もちろん、seleniumbasicでもOKです。


driver.ExecuteScript("window.scrollTo(0, document.body.scrollHeight);")

でスクロールしてくれなかったら、


driver.ExecuteScript ("window.scrollTo(0, document.documentElement.scrollHeight);")

を試してください。

これでダメなら、きちんと取得できているか確認してみましょう。

「driver.ExecuteScript("document.body.scrollHeight;")」とかだとreturnしてないので取得できません。


    Dim temp As Long
    temp = driver.ExecuteScript("return document.body.scrollHeight;")
    MsgBox temp

    Dim temp As Long
    temp = driver.ExecuteScript("return document.documentElement.scrollHeight;")
    MsgBox temp

関連記事

no image
SeleniumBasicで自動スクロール(回数指定あり・なし)[No77]
selenium Basic(VBA)で特定サイトを自動スクロール、スクレイピングする際のプログラムを用意してみましたのでご活用ください。 プログラム 早速プログラムの紹介です。一つ ...
no image
SeleniumBasicでボタン自動クリック(回数指定あり・なし)[No78]
プログラム 前回の以下記事のプログラムと同じ箇所が多くなります。ので以下記事のプログラムを用意いただき、以降紹介するようにしてください。 1.以下箇所は何度押しても良いボタンはないの ...

参考サイト

「window.scrollTo(0, document.body.scrollHeight)」が上手く動作はこれかなと思います。勉強になりました、ありがとうございます。

document.body.scrollTopが常に0を返す謎を調べてみた - Qiita
document.body.scrollTopが常に0を返す謎を調べてみた - Qiita

続きを見る

最後までお付き合いいただきありがとうございます!

この情報が誰かの役にたてれば幸いです。

スポンサーリンク

タグ

-その他

© 2021 BookALittle