我正在尝试使用selenium和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的网页有关?或者是不同的东西?更重要的是,如何向下滚动页面?我想向下滚动页面并单击“下一步”,以便我可以看到下一个评论,我想继续这样做,直到评论结束。我该怎么做?
答案 0 :(得分:0)
似乎在您正在访问的网页上,滚动条实际上并不是您所在窗口的滚动条。您可能意味着滚动评论框或叠加层,而不是正文。因为滚动身体没有(可见)效果。
因此,您必须找到要滚动的元素,然后滚动该元素。
例如,评论框的选择器(可以滚动)是.webstore-te-qc-rb-Lg
。然后你的代码看起来像这样:
var a = document.getElementsByClassName("webstore-te-qc-rb-Lg");
// assuming a.length == 1
a[0].scrollTop = a[0].scrollHeight;
这对我有用,但这完全取决于你想要达到的元素以及scollbar的位置。您可以使用firefox内置的开发工具找到它是哪一个:Inspector>用鼠标选择元素,找到包裹滚动条和相关内容的元素。
希望它有所帮助。
答案 1 :(得分:0)
向下滚动的另一种方法是使用页面的body标记获取元素,并在该元素上发送:space
或:down
个键 -
body = driver.find_element(:tag_name, 'body')
body.send_keys :space
或
body.send_keys :down
您可以重复向下滚动,直到满足您的条件。
答案 2 :(得分:0)
使用此代码
JavascriptExecutor jse =(JavascriptExecutor)浏览器; jse.executeScript(" window.scrollBy(0,document.body.scrollHeight || document.documentElement.scrollHeight)","");
取代你的: browser.execute_script(" window.scrollTo(0,document.body.scrollHeight);")
答案 3 :(得分:0)
我必须添加一点延迟才能使其正常运行。不要问我为什么... 1毫秒可说的不是太多:
<body onload="setTimeout(function(){window.scrollBy(0,document.body.scrollHeight)}, 1);>