3

ページがあります。手動でスクロールすると、スクロールが大きくなり、スクロールが一番下に到達するまで何度もスクロールできます(Facebookのタイムラインページが良い例です)。

私は書いてみます:

static IWebDriver driver = new ChromeDriver(@"C:\selenium\net40");
IJavaScriptExecutor js = driver as IJavaScriptExecutor;

次に、ページに入って次のことを行いました。

js.ExecuteScript("window.scroll(0, document.height)");

しかし、もっとスクロールできます。

ページが大きくなっても一番下までスクロールするにはどうすればよいですか?

どんな助けでも大歓迎です!

4

4 に答える 4

2

window.scroll(0, document.height)既知のスクロール可能領域までスクロールします。問題は、ページの下部に到達すると、より多くのデータがダウンロードされることです。そのため、スクロール可能領域が変更されます。必要な回数だけスクロールする必要があります。

たとえば、このスクリプトを使用します

var timeId = setInterval( function() {
    if(window.scrollY!==document.body.scrollHeight)
        window.scrollTo(0,document.body.scrollHeight);
    else
        clearInterval(timeId);
},500);

編集 :

一部のページで は、window.scrollYが と等しくならないdocument.body.scrollHeightため、setIntervanl がクリアされることはありません。これにより、トップに移動できなくなります。

var timeId = setInterval( function() {
    if(window.scrollY<(document.body.scrollHeight-window.screen.availHeight))
        window.scrollTo(0,document.body.scrollHeight);
    else
    {
        clearInterval(timeId);
        window.scrollTo(0,0);
    }
},500);
于 2013-07-17T07:55:41.173 に答える
1

次の 2 つの関数は、新しいコンテンツが読み込まれたときにページを強制的にスクロールします。

JS:

var attachScrollModified = function () {
    document.addEventListener('DOMSubtreeModified', function () {
        this.removeEventListener('DOMSubtreeModified', arguments.callee, false);
        window.scroll(0, getBottomElemPos());
        attachScrollModified();
    });
}

var getBottomElemPos = function () {
    var scrollElem = document.getElementById("scrollElem");
    if (scrollElem) {
        document.body.removeChild(scrollElem);
    }
    scrollElem = document.createElement("div");
    scrollElem.id = "scrollElem";
    document.body.appendChild(scrollElem);
    return scrollElem.offsetTop;
}

例: http://jsfiddle.net/MaxPRafferty/aHGD6/

それらを<script>ページの a に配置してから、次を呼び出します。

js.ExecuteScript("attachScrollModified();");

とはいえ、これにより、より多くのコンテンツを継続的に ajax する無限ループが発生する可能性があります。

于 2013-07-18T17:00:08.093 に答える