浅谈selenium如何应对网页内容需要鼠标滚动加载的问题

相信大家在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如何应对网页内容需要鼠标滚动加载的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • python中selenium操作下拉滚动条的几种方法汇总

    UI自动化中经常会遇到元素识别不到,找不到的问题,原因有很多,比如不在iframe里,xpath或id写错了等等:但有一种是在当前显示的页面元素不可见,拖动下拉条后元素就出来了. 比如下面这样一个网页,需要进行拖动下拉条后才能通过selenium找到密码输入框的元素, 在python中有几种方法解决这种问题,简单介绍下,给需要的人: 方法一)使用js脚本直接操作,方法如下: js="var q=document.getElementById('id').scrollTop=10000"

  • Python selenium 三种等待方式详解(必会)

    很多人在群里问,这个下拉框定位不到.那个弹出框定位不到-各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加等待.殊不知,你的代码运行速度是什么量级的,而浏览器加载渲染速度又是什么量级的,就好比闪电侠和凹凸曼约好去打怪兽,然后闪电侠打完回来之后问凹凸曼你为啥还在穿鞋没出门?凹凸曼分分中内心一万只羊驼飞过,欺负哥速度慢,哥不跟你玩了,抛个异常撂挑子了. 那么怎么才能照顾到凹凸曼缓慢的加载速度呢?只有一个办法,那就是等喽.说到等,又有三种等法,且听博主一一道来: 1. 强制等待

  • 玩转python selenium鼠标键盘操作(ActionChains)

    用selenium做自动化,有时候会遇到需要模拟鼠标操作才能进行的情况,比如单击.双击.点击鼠标右键.拖拽等等.而selenium给我们提供了一个类来处理这类事件--ActionChains selenium.webdriver.common.action_chains.ActionChains(driver) 这个类基本能够满足我们所有对鼠标操作的需求. 1.ActionChains基本用法 首先需要了解ActionChains的执行原理,当你调用ActionChains的方法时,不会立即执行

  • 浅谈selenium如何应对网页内容需要鼠标滚动加载的问题

    相信大家在selenium爬取网页的时候都遇到过这样的问题:就是网页内容需要用鼠标滚动加载剩余内容,而不是一次全部加载出网页的全部内容,这个时候如果要模拟翻页的时候就必须加载出全部的内容,不然定位元素会找不到,出现报错. 这里提供两种方法供大家参考 一,通过selenium模拟浏览器,然后设置浏览器高度足够长,最后延时使之能够将页面的内容都能够加载出来 import time from selenium import webdriver driver = webdriver.Firefox()

  • 浅谈android Fragment横竖屏翻转对重新加载的要求

    有时候,我们在同一个activity里面有很多fragment,在横竖屏的时候,有些fragment要求重新加载数据,有些不需要,如何简单控制这些需求,本人分享一点小经验,欢迎大家指正里面的错误. 大家都知道横竖屏翻转的时候,activity会重启,fragment也会重新加载,如果现在要求在横竖屏翻转的时候,同一个activity中,一个fragment要重新加载,一个不要重新加载,那该怎么办呢? 如果在activity里面继承了onConfigurationChanged这个方法之后,这个a

  • vue 使用鼠标滚动加载数据的例子

    关于用鼠标滚动到某个位置我们就去加载数据,这样的场景与业务需求现在越来越常见,现在来分析下<vue.js 实战>中作者的一个解决策略: 1. 设置一个标志位用来判断数据是否在加载中 2. 将滚动区域设置成 overfow:auto(显示滚动条) 3. 给滚动区域加入监听事件并绑定ref属性 来获取DOM实例 4. 当鼠标滚动到底部时,加载数据 4.1 如果此时 标志位为true则 直接退出,不进行此时数据加载 关键代码如下: <template> //...代码省略 //该div

  • 使用jQuery或者原生js实现鼠标滚动加载页面新数据

    相信很多人都见过瀑布流图片布局,那些图片是动态加载出来的,效果很好,对服务器的压力相对来说也小了很多,用鼠标操作的时候相信都见过这样的效果:进入qq空间,向下拉动空间,到底部时,会动态加载剩余的说说或者是日志 ,今天我们就来看看他们的实现思路和js控制动态加载的代码. 下面的代码主要是控制滚动条下拉时的加载事件的,无论是加载图片还是加载记录数据  都可以. 加载jQuery库后我们可以这样使用: $(window).scroll(function () { var scrollTop = $(t

  • 浅谈Selenium 控制浏览器的常用方法

    1.自定义浏览器窗口大小或全屏 from selenium import webdriver import time driver = webdriver.Chrome() driver.get('https://www.baidu.com/') # 自定义窗口大小 driver.set_window_size(100, 200)#参数数字为像素点 print('现在是自定义大小展示') time.sleep(5)#睡5秒 显示一下效果 #全屏展示 driver.maximize_window(

  • 浅谈Selenium+Webdriver 常用的元素定位方式

    假设页面源代码如下: <input type="text"name="wd" id="kw1" class="input_wd" maxlength="100"style="width:474px;"autocomplete="off"> 通过id定位元素:find_element_by_id("id_vaule"): browser=

  • 浅谈bootstrap源码分析之scrollspy(滚动侦听)

    源码文件: Scrollspy.js 实现功能 1.当滚动区域内设置的hashkey距离顶点到有效位置时,就关联设置其导航上的指定项 2.导航必须是 .nav > li > a 结构,并且a上href或data-target要绑定hashkey 3.菜单上必须有.nav样式 4.滚动区域的data-target与导航父级Id(一定是父级)要一致 <div id="selector" class="navbar navbar-default">

  • 浅谈vue中组件绑定事件时是否加.native

    组件绑定事件时 1. 普通组件绑定事件不能添加.native, 添加后事件失效 2. 自定义组件绑定事件需要添加.native, 否则事件无效 <template> <!-- <mt-field label="用户名" placeholder="请输入用户名"></mt-field> --> <input type="text" @keyup.native="show($event)

  • 浅谈python opencv对图像颜色通道进行加减操作溢出

    由于opencv读入图片数据类型是uint8类型,直接加减会导致数据溢出现象 (1)用Numpy操作 可以先将图片数据类型转换成int类型进行计算, data=np.array(image,dtype='int') 经过处理后(如:遍历,将大于255的置为255,小于0的置为0) 再将图片还原成uint8类型 data=np.array(image,dtype='uint8') 注意: (1)如果直接相加,那么 当像素值 > 255时,结果为对256取模的结果,例如:(240+66) % 256

  • 抽出www.templatemonster.com的鼠标悬停加载大图模板的代码

    <html> <head>     <!--调用css调整显示层的属性-->     <link rel="stylesheet" href="lightBox.css" type="text/css">     <link rel="stylesheet" href="lightStyle.css" type="text/css"&

随机推荐