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

    xiaoxiao2021-03-26  23

    前言

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

    转载请注明原文地址: https://ju.6miu.com/read-658888.html

    最新回复(0)