解决微博动态加载的代码实现

来源:互联网 发布:racemenu捏脸数据 编辑:程序博客网 时间:2024/06/05 00:44

前言

假期爬取微博内容的时候遇到了不少麻烦,其中一个就是由于微博的改版,内容的呈现需要读者下拉加载出来,不然源代码中没有相应的内容,爬取时就会造成缺漏,针对这个问题,在使用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页面的滚动条操作

1 0
原创粉丝点击