selenium补充: 滚动条

简述:

  当一个页面的数据不能一次性渲染完成时,使用selenium也不能直接获取到所有页面数据,这时就需要我们通过指令, 执行下拉滚动条的命令,来加载所有要加载的数据

 

方法:

  1. 使用js可以达到滑动滚动条的目的

   

  2. 使用selenium的指令来调用js指令

实例:

"""获取京东索尼相机页面数据"""
from selenium import webdriver
from lxml import etree
from time import sleep


# 创建模拟浏览器并访问
myweb = webdriver.Chrome()
url = 'https://search.jd.com/Search?keyword=%E5%BE%AE%E5%8D%95%E7%9B%B8%E6%9C%BA&enc=utf-8&wq=%E5%BE%AE%E5%8D%95%E7%9B%B8%E6%9C%BA&pvid=o3ogjboi.r5cini'
myweb.get(url)

# 编写js,滑动滚动条,并使用模拟浏览器调用(等待页面数据加载,睡3秒)
js = "document.documentElement.scrollTop=100000"
myweb.execute_script(js)
sleep(3)

# 获取页面数据
html = myweb.page_source

# 解析HTML,提取价格和名字,打印
e = etree.HTML(html)
prices = e.xpath("//div[@class='gl-i-wrap']/div[@class='p-price']/strong/i/text()")
names = e.xpath("//div[@class='gl-i-wrap']/div[@class='p-name p-name-type-2']/a")

print('---------当前加载的产品数据量', len(names))
for price, name in zip(prices, names):
    name = name.xpath('string(.)')
    print('产品名:', name.strip(), '价格:', price.strip())

 

posted @ 2020-06-04 17:05  黑无常  阅读(166)  评论(0)    收藏  举报