前言
假期爬取微博内容的时候遇到了不少麻烦,其中一个就是由于微博的改版,内容的呈现需要读者下拉加载出来,不然源代码中没有相应的内容,爬取时就会造成缺漏,针对这个问题,在使用selenium进行模拟登陆之余,也进行模拟滚动条的下拉,确实有了不错的效果,但是最大的坏处就是时间消耗太大了,如果有更好的方法希望进行交流~
实现动态加载
网上的资源也很多,这里提供Python和Java两种编程语言的代码实现
Python版本
(1)使用js脚本直接操作,方法如下
js="var q=document.getElementById('id').scrollTop=10000"
driver.execute_script(js)
(2)使用js脚本拖动到提定地方
target = driver.find_element_by_id("id_keypair")
driver.execute_script("arguments[0].scrollIntoView();", target) #拖动到可见的元素去
(3)具体版本
#coding=utf-8
from selenium import webdriver
#访问微博
driver=webdriver.Firefox()
driver.get("http://www.weibo.com")
#这里需要停一段时间进行登录(也可以自动输入账号密码)
#将页面滚动条拖到底部
js="var q=document.documentElement.scrollTop=100000"
driver.execute_script(js)
time.sleep(3)
#将滚动条移动到页面的顶部
js="var q=document.documentElement.scrollTop=0"
driver.execute_script(js)
time.sleep(3)
#将页面滚动条移动到页面任意位置,改变等于号后的数值即可
js="var q=document.documentElement.scrollTop=50"
driver.execute_script(js)
time.sleep(999999)
'''''
#若要对页面中的内嵌窗口中的滚动条进行操作,要先定位到该内嵌窗口,在进行滚动条操作
js="var q=document.getElementById('id').scrollTop=100000"
driver.execute_script(js)
time.sleep(3)
'''
driver.quit()
Java版本
Java与Python是类似的
//移动到元素element对象的“顶端”与当前窗口的“顶部”对齐
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView();", element);
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
//移动到元素element对象的“底端”与当前窗口的“底部”对齐
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(false);", element);
//移动到页面最底部
((JavascriptExecutor) driver).executeScript("window.scrollTo(0, document.body.scrollHeight)");
//移动到指定的坐标(相对当前的坐标移动)
((JavascriptExecutor) driver).executeScript("window.scrollBy(0, 700)");
Thread.sleep(3000);
//结合上面的scrollBy语句,相当于移动到700+800=1600像素位置
((JavascriptExecutor) driver).executeScript("window.scrollBy(0, 800)");
//移动到窗口绝对位置坐标,如下移动到纵坐标1600像素位置
((JavascriptExecutor) driver).executeScript("window.scrollTo(0, 1600)");
Thread.sleep(3000);
//结合上面的scrollTo语句,仍然移动到纵坐标1200像素位置
((JavascriptExecutor) driver).executeScript("window.scrollTo(0, 1200)");
参考资料:
1.python中selenium操作下拉滚动条方法汇总
2.selenium_webdriver(python)控制浏览器滚动条
3.Java selenium web页面的滚动条操作