我有一个代码可以将不断增长的页面滚动到底部(直到无法滚动到底部)。
当它不可能时,它会滚动到顶部并完成javascript代码。
例如:想象一下facebook上的时间表 这是一个不断增长的页面,所以我可以一次又一次地滚动它,直到它无法滚动(然后我将进入:“BORN”)。
所以这是我的代码:
while (i < elements.Count)
{
js.ExecuteScript("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); } },5000);");
i++;
}
我想仅在i
完成时才向setInterval
添加1。
我尝试了下一件事:
while (i < elements.Count)
{
object a = js.ExecuteScript("setInterval( function() {
if(window.scrollY<(document.body.scrollHeight-window.screen.availHeight)) {
window.scrollTo(0,document.body.scrollHeight); return '1'}; else {
clearInterval(timeId); window.scrollTo(0,0); return '2'} },5000);");
while (a != '2') {
// do nothing, this while will be ended when we arrived the bottom and
// go back to the top
}
// all the page is loaded
i++;
}
但它不起作用..也许有一种方法滚动到底部越来越多,然后到顶部而不使用设置间隔? (但请记住:当你向下和向下滚动页面时,这是一个不断增长的页面。
我该怎么做?
答案 0 :(得分:2)
setInterval
函数是异步的,这意味着它在ExecuteScript
函数获得返回值后发生,这就是为什么你尝试的不起作用的原因。我能想到的最好的解决方案是改变代码的结构并使用C#Threading。
这样,我们要做的是每次停止代码5秒,然后执行一个JavaScript代码,检查是否可以向下滚动,如果是,则向下滚动,如果不向上滚动。此JavaScript代码还将返回是否应继续运行此循环。
基本上,这是我们将执行的JavaScript代码:
if (window.scrollY < (document.body.scrollHeight - window.screen.availHeight)) {
window.scrollTo(0, document.body.scrollHeight);
return true;
} else {
window.scrollTo(0, 0);
return false;
}
这就是整个C#代码的外观:
while (i < elements.Count)
{
bool run = true;
while (run)
{
System.Threading.Thread.Sleep(5000);
run = (bool)js.ExecuteScript("if(window.scrollY<(document.body.scrollHeight-window.screen.availHeight)){window.scrollTo(0,document.body.scrollHeight);return true;}else{window.scrollTo(0,0);return false;}");
}
i++;
}
答案 1 :(得分:0)
找到要用作变量的内容,当你触底时,然后在if
循环中使用While
语句在发生这种情况时递增i