问题描述
我正在尝试使用硒和python并使用execute_script
命令向下滚动页面。
但是,当我执行代码时,我不会向下滚动页面的底部。
以下是我的代码:
def create_browser(first_page=None):
print "Starting"
browser = webdriver.Firefox()
if first_page:
browser.get(first_page)
print "Done."
return browser
browser = create_browser()
print 'loaded'
browser.get('https://chrome.google.com/webstore/detail/ie-tab/hehijbfgiekmjfkfjpbkbammjbdenadd/reviews')
time.sleep(4)
elem = WebDriverWait(browser, 30).until(EC.presence_of_all_elements_located((By.XPATH, '//a[@ga:type="NextLink"]')))
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
print "Scrolled."
我得到了“滚动”。
打印在我的控制台上,但页面没有向下滚动。
我已经阅读了一些页面,这些页面表明browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
会将我滚动到页面底部。
但是,就我而言,这不会发生。
这是否与使用AJAX的网页有关?
还是有所不同?
更重要的是,我如何向下滚动页面?
我想向下滚动页面,然后单击“下一步”,这样我才能看到下一条评论,并且我希望一直这样做直到评论结束。
我怎么做?
1楼
似乎在您正在访问的网页上,滚动条实际上??并不是您所在窗口的滚动条。 您可能想滚动注释框或叠加层,而不是正文。 因为滚动身体没有(可见)效果。
因此,您必须找到要滚动的元素,然后滚动该元素。
例如,注释框(可以滚动)的选择器是.webstore-te-qc-rb-Lg
。
然后您的代码将如下所示:
var a = document.getElementsByClassName("webstore-te-qc-rb-Lg");
// assuming a.length == 1
a[0].scrollTop = a[0].scrollHeight;
那对我来说是成功的,但是这完全取决于您想要达到的元素以及滚动条的位置。 您可以使用firefox内置的开发工具找到它之一:Inspector>用鼠标选择元素,然后找到一个包装滚动条和相关内容的工具。
希望能帮助到你。
2楼
向下滚动的另一种方法是获取带有body标签的元素,并在该元素上发送:space
或:down
键-
body = driver.find_element(:tag_name, 'body')
body.send_keys :space
要么
body.send_keys :down
您可以重复向下滚动操作,直到满足条件为止。
3楼
使用此代码
JavascriptExecutor jse =(JavascriptExecutor)浏览器; jse.executeScript(“ window.scrollBy(0,document.body.scrollHeight || document.documentElement.scrollHeight)”,“”);
代替您的浏览器:browser.execute_script(“ window.scrollTo(0,document.body.scrollHeight);”)
4楼
我必须添加一点延迟才能使其正常运行。 不要问我为什么... 1毫秒争论不了太多:
<body onload="setTimeout(function(){window.scrollBy(0,document.body.scrollHeight)}, 1);>