浅谈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实现网页链接提取的方法分享
Feb 25 Python
Python3使用requests包抓取并保存网页源码的方法
Mar 15 Python
Python操作MySQL数据库的三种方法总结
Jan 30 Python
解决Pycharm运行时找不到文件的问题
Oct 29 Python
对IPython交互模式下的退出方法详解
Feb 16 Python
Python脚本利用adb进行手机控制的方法
Jul 08 Python
django自定义模板标签过程解析
Dec 14 Python
如何将你的应用迁移到Python3的三个步骤
Dec 22 Python
使用Python串口实时显示数据并绘图的例子
Dec 26 Python
解决django migrate报错ORA-02000: missing ALWAYS keyword
Jul 02 Python
基于OpenCV的网络实时视频流传输的实现
Nov 15 Python
python实现猜拳游戏项目
Nov 30 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 preg_match_all结合str_replace替换内容中所有img
2008/10/11 PHP
PHP入门教程之上传文件实例详解
2016/09/11 PHP
php中实现进程锁与多进程的方法
2016/09/18 PHP
PHP实现一个按钮点击上传多个图片操作示例
2020/01/23 PHP
一个cssQuery对象 javascript脚本实现代码
2009/07/21 Javascript
利用javascript打开模态对话框(示例代码)
2014/01/11 Javascript
巧用局部变量提升javascript性能
2014/02/24 Javascript
js实现弹出窗口、页面变成灰色并不可操作的例子分享
2014/05/10 Javascript
js如何判断输入字符串长度
2015/12/16 Javascript
jQuery解析json格式数据简单实例
2016/01/22 Javascript
jquery的 filter()方法使用教程
2018/03/22 jQuery
详解微信小程序调起键盘性能优化
2018/07/24 Javascript
Vue父子组件双向绑定传值的实现方法
2018/07/31 Javascript
简单了解vue.js数组的常用操作
2019/06/17 Javascript
解决layui的radio属性或别的属性没显示出来的问题
2019/09/26 Javascript
[19:59]2014DOTA2国际邀请赛 IG战队纪录片
2014/08/07 DOTA
python分析nignx访问日志脚本分享
2015/02/26 Python
python中zip()方法应用实例分析
2016/04/16 Python
浅析python中SQLAlchemy排序的一个坑
2017/02/24 Python
python爬虫使用cookie登录详解
2017/12/27 Python
利用Anaconda简单安装scrapy框架的方法
2018/06/13 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
python自动分箱,计算woe,iv的实例代码
2019/11/22 Python
python cv2在验证码识别中应用实例解析
2019/12/25 Python
matplotlib quiver箭图绘制案例
2020/04/17 Python
Django实现图片上传功能步骤解析
2020/04/22 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
2020/06/15 Python
Win10下用Anaconda安装TensorFlow(图文教程)
2020/06/18 Python
CSS3 linear-gradient线性渐变生成加号和减号的方法
2017/11/21 HTML / CSS
中国茶叶、茶具一站式网上购物商城:醉品茶城
2018/07/03 全球购物
Spartoo荷兰:鞋子、包包和服装
2018/07/12 全球购物
会计毕业生求职简历的自我评价
2013/10/20 职场文书
查摆剖析材料范文
2014/09/30 职场文书
简易离婚协议书范本2014
2014/10/15 职场文书
公务员岗前培训心得体会
2016/01/08 职场文书
Go遍历struct,map,slice的实现
2021/06/13 Golang