#coding=utf-8
from selenium import webdriver
import time
#访问百度
driver=webdriver.Firefox()
driver.get("http://www.baidu.com")
#搜索
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
time.sleep(3)
#将页面滚动条拖到底部
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()
这样你就可以实现通过selenium来控制浏览器中的导航条,在爬虫中,服务器返回的数据并不是一次性就返回完毕的,而是通过你逐步向下浏览,通过js逐步加载出来的,也就是你没浏览到哪个地方的时候,这个地方的数据并不会加载出来,那么我们就可以模拟鼠标滚轮向下翻页的动作,让数据被动的加载出来,那么当我们爬虫爬取到这个地方的时候,数据已经加载出来了,就不会出现定位不到元素或者爬取的图片都是未加载出来的图片。
如果想让你的导航条下拉的节奏与你爬虫向下爬取数据的节奏保持一致,那么该怎么做呢?提供一个已经实现的思路:
比如,你要爬取的标签已经保存在了一个列表里面,那么这个列表的长度就是你在该页面要爬取的次数,浏览器从上到下的长度是0-10000,那么10000/(列表的长度),这个结果就是你导航条每次要移动的距离,通过距离叠加,是不是就可以不断的向下拉导航条了?认真想想是不是这样的?
如果还是不理解,请在留言处留下你的邮箱,我将代码发给你参考。