浅谈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实现数组插入新元素的方法
May 22 Python
windows系统下Python环境搭建教程
Mar 28 Python
Django 生成登陆验证码代码分享
Dec 12 Python
PyQt5每天必学之像素图控件QPixmap
Apr 19 Python
Python运维开发之psutil库的使用详解
Oct 18 Python
详解python列表生成式和列表生成式器区别
Mar 27 Python
python线程中的同步问题及解决方法
Aug 29 Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
Feb 10 Python
Python unittest工作原理和使用过程解析
Feb 24 Python
Cpython解释器中的GIL全局解释器锁
Nov 09 Python
详解使用python爬取抖音app视频(appium可以操控手机)
Jan 26 Python
python tkinter模块的简单使用
Apr 07 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
PHP编程中字符串处理的5个技巧小结
2007/11/13 PHP
PHP生成sitemap.xml地图函数
2013/11/13 PHP
php实现utf-8转unicode函数分享
2015/01/06 PHP
php pthreads多线程的安装与使用
2016/01/19 PHP
详解PHP处理密码的几种方式
2016/11/30 PHP
cssQuery()的下载与使用方法
2007/01/12 Javascript
js计算页面刷新的次数
2009/07/20 Javascript
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
jQuery中的jQuery()方法用法分析
2014/12/27 Javascript
JavaScript模拟重力状态下抛物运动的方法
2015/03/03 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
jQuery 中的 DOM 操作
2016/04/26 Javascript
详解nodejs与javascript中的aes加密
2016/05/22 NodeJs
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
AngularJS表单详解及示例代码
2016/08/17 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
jQuery+C#实现参数RSA加密传输功能【附jsencrypt.js下载】
2017/06/26 jQuery
vue实现移动端图片裁剪上传功能
2020/08/18 Javascript
Vue的Class与Style绑定的方法
2017/09/01 Javascript
微信小程序实现YDUI的ScrollNav组件
2018/02/02 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
2018/02/22 Javascript
详解JavaScript中typeof与instanceof用法
2018/10/24 Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
2019/01/17 Javascript
Vue+webpack实现懒加载过程解析
2020/02/17 Javascript
python网络编程学习笔记(10):webpy框架
2014/06/09 Python
python简单程序读取串口信息的方法
2015/03/13 Python
python2与python3中关于对NaN类型数据的判断和转换方法
2018/10/30 Python
css3 中实现炫酷的loading效果
2019/04/26 HTML / CSS
香港礼品网站:GiftU eshop
2017/09/01 全球购物
函授大专自我鉴定
2013/11/01 职场文书
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
药品营销专业毕业生自荐信
2014/07/02 职场文书
12.4全国法制宣传日活动总结
2014/11/01 职场文书
健康状况证明书
2014/11/26 职场文书
2019年大学毕业生个人自我鉴定范文大全
2019/03/21 职场文书
Vue3中的Refs和Ref详情
2021/11/11 Vue.js