浅谈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判断字符串是否包含子字符串的方法
Mar 24 Python
Python的Tornado框架异步编程入门实例
Apr 24 Python
python写入xml文件的方法
May 08 Python
Python单链表简单实现代码
Apr 27 Python
python实现单线程多任务非阻塞TCP服务端
Jun 13 Python
Python内置模块turtle绘图详解
Dec 09 Python
Python简单定义与使用二叉树示例
May 11 Python
python使用tkinter库实现五子棋游戏
Jun 18 Python
VSCode中自动为Python文件添加头部注释
Nov 14 Python
Pytorch中的VGG实现修改最后一层FC
Jan 15 Python
新建文件时Pycharm中自动设置头部模板信息的方法
Apr 17 Python
python能开发游戏吗
Jun 11 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网上调查系统
2006/10/09 PHP
调整PHP的性能
2013/10/30 PHP
PHP5各个版本的新功能和新特性总结
2014/03/16 PHP
Laravel 5框架学习之Blade 简介
2015/04/08 PHP
php数组比较实现查找连续数的方法
2015/07/29 PHP
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
Javascript的各种节点操作实例演示代码
2012/06/27 Javascript
jQuery获得指定元素坐标的方法
2015/04/14 Javascript
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
微信小程序开发入门基础教程
2017/04/19 Javascript
Vue.js实现开发购物车功能的方法详解
2019/02/22 Javascript
ES6的异步操作之promise用法和async函数的具体使用
2019/12/06 Javascript
js实现百度登录窗口拖拽效果
2020/03/19 Javascript
Postman如何实现参数化执行及断言处理
2020/07/28 Javascript
小程序中手机号识别的示例
2020/12/14 Javascript
[05:02][DOTA2]DOTA进化论 第一期
2013/09/27 DOTA
Python中__name__的使用实例
2015/04/14 Python
python版本的读写锁操作方法
2016/04/25 Python
Python冒泡排序注意要点实例详解
2016/09/09 Python
Python3.5装饰器原理及应用实例详解
2019/04/30 Python
numpy下的flatten()函数用法详解
2019/05/27 Python
Python实现银行账户资金交易管理系统
2020/01/03 Python
Python3 搭建Qt5 环境的方法示例
2020/07/16 Python
python通过函数名调用函数的几种场景
2020/09/23 Python
波兰数码相机及配件网上商店: Cyfrowe.pl
2017/06/19 全球购物
药物学专业学生的自我评价
2013/10/27 职场文书
医学实习生自我鉴定
2013/12/12 职场文书
初中教师业务学习材料
2014/05/12 职场文书
土建工程师岗位职责
2014/06/10 职场文书
2016年区委书记抓基层党建工作公开承诺书
2016/03/25 职场文书
2016年禁毒宣传活动总结
2016/04/05 职场文书
解决golang结构体tag编译错误的问题
2021/05/02 Golang
在前女友婚礼上,用Python破解了现场的WIFI还把名称改成了
2021/05/28 Python
浅谈Python数学建模之线性规划
2021/06/23 Python
 分享一个Python 遇到数据库超好用的模块
2022/04/06 Python