浅谈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 20 Python
Python入门教程之运算符与控制流
Aug 17 Python
python3 判断列表是一个空列表的方法
May 04 Python
详解python中的json和字典dict
Jun 22 Python
Python功能点实现:函数级/代码块级计时器
Jan 02 Python
对python字典过滤条件的实例详解
Jan 22 Python
python里dict变成list实例方法
Jun 26 Python
详解django实现自定义manage命令的扩展
Aug 13 Python
浅谈Python 敏感词过滤的实现
Aug 15 Python
pytorch 加载(.pth)格式的模型实例
Aug 20 Python
python shapely.geometry.polygon任意两个四边形的IOU计算实例
Apr 12 Python
Pytorch环境搭建与基本语法
Jun 03 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实现密保卡功能实现代码<打包下载直接运行>
2011/10/09 PHP
给ECShop添加最新评论
2015/01/07 PHP
php多线程并发实现方法
2016/09/30 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
js parentElement和offsetParent之间的区别
2010/03/23 Javascript
jQuery获取地址栏参数插件(模仿C#)
2010/10/26 Javascript
javascript tips提示框组件实现代码
2010/11/19 Javascript
js实现两个值相加alert出来精确到指定位
2013/09/25 Javascript
ParseInt函数参数设置介绍
2014/01/02 Javascript
下拉框select的绑定示例
2014/09/04 Javascript
jQuery实现复选框成对选择及对应取消的方法
2015/03/03 Javascript
angularjs客户端实现压缩图片文件并上传实例
2015/07/06 Javascript
jQuery简单设置文本框回车事件的方法
2016/08/01 Javascript
javascript 正则表达式去空行方法
2017/01/24 Javascript
Javascript for in的缺陷总结
2017/02/03 Javascript
jQuery Layer弹出层传值到父页面的实现代码
2017/08/17 jQuery
vue-router路由模式详解(小结)
2019/08/26 Javascript
layer.open回调获取弹出层参数的实现方法
2019/09/10 Javascript
vue实现计步器功能
2019/11/01 Javascript
vue-cli 关闭热更新操作
2020/09/18 Javascript
原生JavaScript实现换肤
2021/02/19 Javascript
[00:17]游戏风云独家报道:DD赛后说出数字秘密 吓死你们啊!
2014/07/13 DOTA
[04:09]2018年度DOTA2社区贡献奖-完美盛典
2018/12/16 DOTA
[01:03]PWL开团时刻DAY6——别打我
2020/11/05 DOTA
深入了解Python数据类型之列表
2016/06/24 Python
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
对Python中数组的几种使用方法总结
2018/06/28 Python
python远程邮件控制电脑升级版
2019/05/23 Python
python实现比较类的两个instance(对象)是否相等的方法分析
2019/06/26 Python
PYTHON发送邮件YAGMAIL的简单实现解析
2019/10/28 Python
Python xlrd/xlwt 创建excel文件及常用操作
2020/09/24 Python
Python实现七个基本算法的实例代码
2020/10/08 Python
数据保密承诺书
2014/06/03 职场文书
商务宴会祝酒词
2015/08/11 职场文书
小学校园广播稿
2015/08/18 职场文书
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
2021/05/31 Python