浅谈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中基于生成器的状态机
Apr 13 Python
Python中http请求方法库汇总
Jan 06 Python
Python简单实现查找一个字符串中最长不重复子串的方法
Mar 26 Python
python按行读取文件,去掉每行的换行符\n的实例
Apr 19 Python
Sanic框架请求与响应实例分析
Jul 16 Python
Django中的文件的上传的几种方式
Jul 23 Python
在python中获取div的文本内容并和想定结果进行对比详解
Jan 02 Python
Python实现的删除重复文件或图片功能示例【去重】
Apr 23 Python
python通过paramiko复制远程文件及文件目录到本地
Apr 30 Python
python实现小世界网络生成
Nov 21 Python
python ETL工具 pyetl
Jun 07 Python
Python实现单例模式的5种方法
Jun 15 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
php读取富文本的时p标签会出现红线是怎么回事
2014/05/13 PHP
php实现模拟post请求用法实例
2015/07/11 PHP
PHP延迟静态绑定的深入讲解
2018/04/02 PHP
docker-compose部署php项目实例详解
2019/07/30 PHP
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
测试你的JS的掌握程度的代码
2009/12/09 Javascript
javascript Firefox与IE 替换节点的方法
2010/02/24 Javascript
javascript encodeURI和encodeURIComponent的比较
2010/04/03 Javascript
Javascript中的delete介绍
2012/09/02 Javascript
JS中如何设置readOnly的值
2013/12/25 Javascript
js验证上传图片的方法
2015/05/12 Javascript
使用JavaScript判断手机浏览器是横屏还是竖屏问题
2016/08/02 Javascript
BootStrap轮播HTML代码(推荐)
2016/12/10 Javascript
微信小程序中用WebStorm使用LESS
2017/03/08 Javascript
javascript编写简易计算器
2017/05/06 Javascript
分析javascript原型及原型链
2018/03/18 Javascript
React Form组件的实现封装杂谈
2018/05/07 Javascript
详解VUE-地区选择器(V-Distpicker)组件使用心得
2018/05/07 Javascript
AngularJS标签页tab选项卡切换功能经典实例详解
2018/05/16 Javascript
python 重定向获取真实url的方法
2018/05/11 Python
Python之字典添加元素的几种方法
2020/09/30 Python
详解CSS3选择器的使用方法汇总
2015/11/24 HTML / CSS
H5仿微信界面教程(一)
2017/07/05 HTML / CSS
HTML5 使用 sessionStorage 进行页面传值的方法
2018/07/02 HTML / CSS
如何在Canvas中添加事件的方法示例
2019/05/21 HTML / CSS
GafasWorld哥伦比亚:网上购买眼镜
2017/11/28 全球购物
澳洲CFL商城:CHEMIST FOR LESS(中文)
2021/02/28 全球购物
财务支持类个人的自我评价
2014/02/14 职场文书
文明家庭先进事迹材料
2014/05/14 职场文书
节能环保演讲稿
2014/08/28 职场文书
乡镇党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
作息时间调整通知
2015/04/22 职场文书
中秋节主题班会
2015/08/14 职场文书
高中信息技术教学反思
2016/02/16 职场文书
党风廉政承诺书2016
2016/03/25 职场文书