浅谈selenium如何应对网页内容需要鼠标滚动加载的问题


Posted in Python onMarch 14, 2020

相信大家在selenium爬取网页的时候都遇到过这样的问题:就是网页内容需要用鼠标滚动加载剩余内容,而不是一次全部加载出网页的全部内容,这个时候如果要模拟翻页的时候就必须加载出全部的内容,不然定位元素会找不到,出现报错。

这里提供两种方法供大家参考

一,通过selenium模拟浏览器,然后设置浏览器高度足够长,最后延时使之能够将页面的内容都能够加载出来

import time
from selenium import webdriver
driver = webdriver.Firefox()
driver.set_window_size(1000,30000)
driver.get(url)
time.sleep(5)

二,通过selenium模拟浏览器下拉操作

from selenium import webdriver
import time
browser.execute_script("window.scrollBy(0,3000)")
time.sleep(1)
browser.execute_script("window.scrollBy(0,5000)")
time.sleep(1)
browser.execute_script("window.scrollBy(0,8000)")
time.sleep(1)

补充知识:针对懒加载如何实现selenium 滑动至页面底部page_source一次性包含全部网页内容

有时网站使用了懒加载技术:只有在浏览器中纵向滚动条滚动到指定的位置时,页面的元素才会被动态加载。

注意,在加载之前,selenium的page_source是不会包含该页面的内容,page_source只包含加载出来的页面内容。

那么如何实现加载全部内容了,就需要模拟人滚动滚动条的行为,实现页面的加载

from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
 
  def scroll_until_loaded(self):
    check_height = self.browser.execute_script("return document.body.scrollHeight;")
    while True:
      self.browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
      try:
        self.wait.until(lambda driver: self.browser.execute_script("return document.body.scrollHeight;") > check_height)
        check_height = self.browser.execute_script("return document.body.scrollHeight;")
      except TimeoutException:
        break

这里懒加载并不是一直有效, 当网速不好时,加载超过self.wait()时间, 页面还没加载出来时, 会认为全部加载完成, page_source里面的代码就会是以前加载出来的, 所以执行翻页操作后, 要执行time.sleep(3), 等待网页加载, 更新html再获取网页源代码

以上这篇浅谈selenium如何应对网页内容需要鼠标滚动加载的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中用sleep()方法操作时间的教程
May 22 Python
Java中重定向输出流实现用文件记录程序日志
Jun 12 Python
详解Python的Django框架中的模版继承
Jul 16 Python
Python实现优先级队列结构的方法详解
Jun 02 Python
Java及python正则表达式详解
Dec 27 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
Oct 29 Python
python组合无重复三位数的实例
Nov 13 Python
python遍历文件目录、批量处理同类文件
Aug 31 Python
np.dot()函数的用法详解
Jan 17 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
Apr 22 Python
scrapy头部修改的方法详解
Dec 06 Python
flask项目集成swagger的方法
Dec 09 Python
Python实现鼠标自动在屏幕上随机移动功能
Mar 14 #Python
Python 读取WAV音频文件 画频谱的实例
Mar 14 #Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
Mar 14 #Python
python matplotlib包图像配色方案分享
Mar 14 #Python
python 使用cx-freeze打包程序的实现
Mar 14 #Python
python matplotlib imshow热图坐标替换/映射实例
Mar 14 #Python
python pyqtgraph 保存图片到本地的实例
Mar 14 #Python
You might like
建立文件交换功能的脚本(三)
2006/10/09 PHP
批量修改RAR文件注释的php代码
2010/11/20 PHP
php绘图中显示不出图片的原因及解决
2014/03/05 PHP
PHP实现加强版加密解密类实例
2015/07/29 PHP
JavaScript 拾漏补遗
2009/12/27 Javascript
toString()一个会自动调用的方法
2010/02/08 Javascript
IE本地存储userdata的一个bug说明
2010/07/01 Javascript
JSON JQUERY模板实现说明
2010/07/03 Javascript
浅谈javascript 函数内部属性
2015/01/21 Javascript
20分钟轻松创建自己的Bootstrap站点
2016/05/12 Javascript
vue移动端UI框架实现QQ侧边菜单组件
2018/03/09 Javascript
Puppeteer 爬取动态生成的网页实战
2018/11/14 Javascript
史上最为详细的javascript继承(推荐)
2019/05/18 Javascript
详解vue项目中实现图片裁剪功能
2019/06/07 Javascript
vue实现分页加载效果
2019/12/24 Javascript
ES6实现图片切换特效代码
2020/01/14 Javascript
python爬虫_自动获取seebug的poc实例
2017/08/05 Python
python+matplotlib绘制旋转椭圆实例代码
2018/01/12 Python
在Python 不同级目录之间模块的调用方法
2019/01/19 Python
python实现大转盘抽奖效果
2019/01/22 Python
python增加图像对比度的方法
2019/07/12 Python
python__new__内置静态方法使用解析
2020/01/07 Python
Python 私有属性和私有方法应用场景分析
2020/06/19 Python
Myprotein荷兰官网:欧洲第一运动营养品牌
2020/07/11 全球购物
WSDL的操作类型主要有几种
2013/07/19 面试题
加拿大留学自荐信
2014/01/28 职场文书
优秀社区干部事迹材料
2014/02/03 职场文书
先进工作者获奖感言
2014/02/08 职场文书
小学生期末评语大全
2014/04/21 职场文书
主持人开幕词
2015/01/29 职场文书
九华山导游词
2015/02/03 职场文书
党员志愿者服务倡议书
2015/04/29 职场文书
2015年幼儿园安全工作总结
2015/05/12 职场文书
单位综合评价意见
2015/06/05 职场文书
信用卡工资证明范本
2015/06/19 职场文书
新郎结婚感言
2015/07/31 职场文书