首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

requests_html渲染向下滚动,脚本不工作

requests_html是一个Python库,用于发送HTTP请求并解析HTML页面。它基于requests库和Pyppeteer库,可以模拟浏览器行为,包括渲染JavaScript和执行页面脚本。

当使用requests_html渲染向下滚动时,有时会遇到脚本不工作的情况。这可能是由于以下原因导致的:

  1. 动态加载:某些网页使用JavaScript动态加载内容,当页面向下滚动时,新的内容会通过AJAX或其他技术加载。requests_html默认只会获取初始加载的静态内容,而不会执行JavaScript来加载动态内容。因此,当向下滚动时,脚本可能无法正常工作。

解决方法:

  • 使用requests_html的session对象,并启用JavaScript渲染功能。这样可以让requests_html执行页面中的JavaScript代码,从而加载动态内容。例如:
代码语言:txt
复制
from requests_html import HTMLSession

session = HTMLSession()
response = session.get(url)
response.html.render()
  • 使用Pyppeteer库来模拟完整的浏览器环境,包括JavaScript的执行和动态内容的加载。Pyppeteer是一个无头浏览器的Python接口,可以与requests_html结合使用。例如:
代码语言:txt
复制
from requests_html import HTMLSession
from pyppeteer import launch

session = HTMLSession()
browser = await launch()
page = await browser.newPage()
await page.goto(url)
await page.evaluate('window.scrollTo(0, document.body.scrollHeight)')
content = await page.content()
await browser.close()
  1. 页面结构变化:有些网页在向下滚动时,会动态改变页面的结构,例如添加新的元素或修改现有元素的属性。这可能导致原始的脚本无法正确地定位或操作元素。

解决方法:

  • 使用requests_html提供的CSS选择器或XPath表达式来定位元素。这样可以根据元素的属性、标签名等特征来选择元素,而不依赖于元素在页面中的位置。例如:
代码语言:txt
复制
from requests_html import HTMLSession

session = HTMLSession()
response = session.get(url)
response.html.render()
elements = response.html.find('.class_name')

总结起来,要解决requests_html渲染向下滚动时脚本不工作的问题,可以使用session对象启用JavaScript渲染功能,或者结合Pyppeteer库模拟完整的浏览器环境。同时,需要注意页面结构的变化,使用合适的定位方法来操作元素。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Reuqests-html教程

最近爬虫遇到的情况是,爬取的网站使用JavaScript渲染的,网站爬取的结果只有一堆JS代码。...之前遇到这种情况的处理办法是用Splash(一般是配合Scrapy),或者Selenium来爬取,介绍一下常用的模拟浏览器执行,来爬去js渲染页面的方法。...from requests_html import HTMLSession session = HTMLSession() response = session.get('http://news.qq.com...8.0, keep_page: bool = False): retries:加载页面失败的次数 script:页面上需要执行的JS脚本 wait:加载页面的等待时间,防止超时 scrolldown:页面向下滚动的次数...sleep:在页面渲染之后的等待时间 reload:Flase页面不会从浏览器中加载,而是从内存中加载 keep_page:True 允许你用r.html.page访问页面 爬取知乎页面,并且模拟下滑页面

1.6K20
  • requests-html快速入门

    我们学习requests_html这个库,其实也就是学习这个HTML类的使用方法。...JavaScript支持 有些网站是使用JavaScript渲染的,这样的网站爬取到的结果只有一堆JS代码,这样的网站requests-html也可以处理,关键一步就是在HTML结果上调用一下render...retries: 加载页面失败的次数 - script: 页面上需要执行的JS脚本(可选) - wait: 加载页面钱的等待时间(秒),防止超时(可选) - scrolldown: 页面向下滚动的次数...- sleep: 在页面初次渲染之后的等待时间 - reload: 如果为假,那么页面不会从浏览器中加载,而是从内存中加载 - keep_page: 如果为真,允许你用r.html.page...href='https://httpbin.org'>""" >>> html = HTML(html=doc) >>> html.links {'https://httpbin.org'} 直接渲染

    1.3K71

    90行代码,15个元素实现无限滚动

    如何在React Hook中实现无限滚动。 如何正确渲染多达10000个元素的列表。 ? 无限下拉加载技术使用户在大量成块的内容面前一直滚动查看。这种方法是在你向下滚动的时候不断加载新内容。...采用relative/absolute 定位来确定滚动位置 追踪两个ref: top/bottom来决定向上/向下滚动渲染与否 切割数据列表,保留最多15个DOM元素。...变量解析 start:当前渲染的列表第一个数据,默认为0 end: 当前渲染的列表最后一个数据,默认为15 observer: 当前观察的视图ref元素 6. useRef 定义追踪的DOM 元素 const...$bottomElement = useRef(); const $topElement = useRef(); 正常的无限向下滚动只需关注一个dom元素,但由于我们是固定15个dom元素渲染,需要判断向上或向下滚动...) => { entries.forEach((entry, index) => { const listLength = props.list.length; // 向下滚动

    3K20

    基于 Flutter 的 Web 渲染引擎「北海」正式开源

    所以我们积极探索一种向上对接前端生态,向下使用原生渲染的跨平台方案。 于是诞生了这款基于 W3C 标准的高性能跨终端渲染引擎——北海(Kraken)。 ?...当 Sliver 容器中的子元素滚动出该容器的 Viewport 时,可以将该子元素中用于渲染的 renderobject 回收以达到节省内存占用的目的。...kraken 团队期望通过协作者的方式来参与 Kraken 功能迭代以及 issue 讨论等工作。同时,通过由一部分协作者组成的技术委员会(TSC)来确定技术方向、发布以及定制标准等工作。...未来展望 以往我们在做前端性能优化的时候,往往优化到浏览器层面就优化不动了,很难向下进行进一步的优化。...可以自顶向下看整个渲染链路的优化及体验,通过全链路的手段去优化性能以及定义一些新的渲染能力。

    1.4K20

    一个快速的 Vue3 无限滚动组件

    无限滚动组件是在用户向下滚动页面时加载新内容,而不是将其分成多个页面。 它们对于特定类型的内容(例如用户生成的内容)非常有效。 以下是无限滚动的示例。...无论如何,学习如何构建一个 Vue3 无限滚动组件是非常有趣的,并且可能对你有用。 首先,让我们从高层次上回顾一下这个系统是如何工作的。...制作我们的内容组件 现在我们有了生成内容的方法,让我们创建一个允许我们渲染它们的组件。 这段代码没有什么花哨的,我们只需要通过组件的 props 接收一个帖子,然后渲染作者和内容。...那么,现在让我们继续进行激动人心的部分:无限滚动! 4. Vue3 无限滚动 现在我们已经完成了所有设置,当用户向下滚动到内容底部时,我们可以开始加载更多数据。...当我们向下滚动到当前内容的底部时,应该会自动加载新内容。让我们看看我们有什么。 无限滚动组件的可能扩展 这只是创建Vue3无限滚动组件的介绍。有很多不同的方向可以改进它。

    2.1K20

    mini react-window(一) 实现固定高度虚拟滚动

    ,实现赖加载,但是如果内容越来越多会引起大量重排和重绘虚拟列表,可视区域有限,看到的数据有限,在用户滚动时,指渲染可是区域内的内容即可,dom 少,渲染少在 github 上也有很多针对 react 的虚拟滚动的库...实现固定渲染虚拟滚动创建自己实现组件的目录// src/react-window/index.jsexport {default as FixedSizeList} from '....startIndex) return [startIndex, endIndex]}const FixedSizeList = createListComponent({ ... // 开始索引我们需要向下取整...:图片可以看到滚动不是很流畅,会有白屏,这就是为什么官方库会默认多两个元素的原因,预先渲染,避免白屏,我们继续优化;// 定义需要预渲染的个数static defaultProps = { overscanCount...getStartIndexForOffset(this.props, scrollOffset) const endIndex = getEndIndexForOffset(this.props, startIndex) // 向下滚动要取最大值

    1.9K51

    React 进阶 - 海量数据处理和其他细节

    # 海量数据 # 时间分片 时间分片主要解决,初次加载,一次性渲染大量数据造成的卡顿现象。浏览器执 js 速度要比渲染 DOM 速度快的多。...时间分片,并没有本质减少浏览器的工作量,而是把一次性任务分割开来,给用户一种流畅的体验效果。...虚拟列表,在长列表滚动过程中,只有视图区域显示的是真实 DOM ,滚动过程中,不断截取视图的有效区域,让人视觉上感觉列表是在滚动,达到无限滚动的效果。...,截取初始化列表长度,这里需要 div 占位,撑起滚动条 通过监听滚动容器的 onScroll 事件,根据 scrollTop 来计算渲染区域向上偏移量 当用户向下滑动的时候,为了渲染区域,能在可视区域内...,可视区域要向上滚动,当用户向上滑动的时候,可视区域要向下滚动 通过重新计算 end 和 start 来重新渲染列表 代码实现 function VirtualList() { const [dataList

    1.4K10

    一个简洁、有趣的无限下拉方案

    不知你是否从上面这张图中注意到了什么,比如只是渲染了可视区域的部分 DOM ,滚动过程中只是外层容器的 padding 在改变?...先概览下总体思路: 监听一个固定长度列表的首尾元素是否进入视窗; 更新当前页面内渲染的第一个元素对应的序号; 根据上述序号,获取目标数据元素,列表内容重新渲染成对应内容; 容器 padding 调整,模拟滚动实现...increment = Math.floor(this.listSize / 2); let firstIndex; if (isScrollDown) { // 向下滚动时序号增加...向下滚动 // padding的增量 = 每一个item的高度 x 新的数据项的数目const remPaddingsVal = itemHeight * (Math.floor(this.listSize...这是一个同步渲染的方案,也就是目前容器 padding 的计算调整,无法计算异步获取的数据,只跟用户的滚动行为有关。这看起来与实际业务场景有些不符。

    1.9K20

    position:sticky的尝试

    前言 sticky这种设计效果是经常出现的,比如陶宝右侧的工具栏,当我们向下滚动到它的位置时,它就会黏住顶部跟随滚动,类似position: fixed的效果,只不过它的触发条件是当我们滚动到所在位置时...兼容性 差不多两年时间了,兼容性还算可以的,对于那种面向技术人员,后台管理人员的项目,我倒是觉得可以用上,毕竟他们只是升级一下浏览器不仅能体验更好的效果,也能降低码农的工作量: https://caniuse.com...如果你发现你设置了不起效果,可以检查以下两个原因: 父级元素不能有任何overflow:visible以外的overflow设置,否则没有效果,因为改变了滚动容器(即使没有出现滚动条)。...父级元素高度过小,根本不够stikcy块的滚动,就会没有效果。...前后端的分离让 JS接替了部分后端语言的工作,比如数据绑定交互等;css接替了部分JS工作,比如动画和各种常见设计效果等,各种语言都在共同协作着,只是为了解决码农痛点,我们能做的就是抽空瞄一眼,试一试,

    94330

    微信小程序开发教程第七章:微信小程序编辑名片页面开发

    最后还有个头像上传图片,测试了下目前上传到后台服务器还有点问题,应该是内测版本不太完善导致吧。 设置的直接是背景图片。 提交表单与跳转。...实际渲染效果可以看到。 这个和第一个编辑页面逻辑基本不相上下,一些基本验证与提交,这里就讲到前面两步骤即可,编辑页面3也是同理,这里不再过多啰嗦。...首先是右边小索引布局以及数据绑定,数据绑定和名片夹列表上的字母一样,该字母下面有名片则渲染出来,没有则不需要渲染,id同样是当前字母与右边显示的内容一样: 数据 sort,和 group.name 数据一样...首先名片列表,名片上的字母索引都在 scroll-view 里面,这个 scroll-view 必须设置好固定的高度,设置成 100% 与 100vh 是无效的,y 轴的滚动开关打开,scroll-into-view...在这里如顶部有些菜单栏的话,你就要注意好布局了,不然会出现向下偏移这个菜单栏的高度,其实你只要和字母索引同级下即可避免此问题(这里的顶部菜单以模板分离出去了,分离模板的时候需注意下,需要在这里绑定模板的一些数据会出现失效

    1.4K80

    下一代Chrome Web渲染架构:RenderingNG

    只执行显示可见内容所需的工作。 内置对通用视觉设计、动画和交互设计模式的支持。 为开发者提供 API 轻松管理渲染开销。 为开发者插件提供渲染管线扩展点。...这称之为向上扩展 — 利用硬件设备可以实现的所有功能,然后向下扩展 — 在需要时最大限度地提高效率并减少对系统的需求。...浏览器中最著名的缓存类型是 HTTP 缓存,但渲染也有很多缓存。滚动最重要的缓存是缓存的 GPU 纹理和显示列表,它允许非常快的滚动,同时最大限度地减少电池消耗并在各种设备上运行良好。...在 Web 上,性能隔离的最佳示例就是滚动。即使在具有大量慢速的 JavaScript 的网站上,滚动也可以非常流畅,因为它运行在不同的线程上,而不必依赖于 JavaScript 和渲染线程。...RenderingNG 会确保每一个可能的滚动都是线程化的,通过缓存,远远超出显示列表到更复杂的情况。示例包括表示固定和粘性定位元素的代码、被动事件监听器和高质量的文本渲染

    1.1K30

    当后端一次性丢给你10万条数据, 作为前端工程师的你,要怎么处理?

    我听完之后立马明白了他的困惑, 如果通过硬编码的方式去直接渲染这两万条数据到select中,肯定会卡死. 后面他还说需要支持搜索, 也是前端来实现,我顿时产生了兴趣....虚拟滚动技术也可以用来优化长列表, 其核心思路就是每次只渲染可视区域的列表数,当滚动后动态的追加元素并通过顶部padding来撑起整个滚动内容,实现思路也非常简单....if(window.scrollY > prevY) { // 判断用户是否向下滚动 prevY = window.scrollY if(poll.current.getBoundingClientRect..., 只有在向下滚动并且滚动高度大于上一次时才更新其值....function scrollAndLoading() { if(window.scrollY > prevY) { // 判断用户是否向下滚动 prevY = window.scrollY

    2.5K40

    Chrome 的下一代 Web 渲染架构:RenderingNG

    只执行显示可见内容所需的工作。 内置对通用视觉设计、动画和交互设计模式的支持。 为开发者提供 API 轻松管理渲染开销。 为开发者插件提供渲染管线扩展点。...所有的核心功能和基础都必须正常工作,并且能在长时间的情况下稳定运行。同样重要的是,这些功能组合得很好并且没有奇怪的边界错误(这里有内涵到?)。 ?...这称之为向上扩展 — 利用硬件设备可以实现的所有功能,然后向下扩展 — 在需要时最大限度地提高效率并减少对系统的需求。 ?...浏览器中最著名的缓存类型是 HTTP 缓存,但渲染也有很多缓存。滚动最重要的缓存是缓存的 GPU 纹理和显示列表,它允许非常快的滚动,同时最大限度地减少电池消耗并在各种设备上运行良好。...在 Web 上,性能隔离的最佳示例就是滚动。即使在具有大量慢速的 JavaScript 的网站上,滚动也可以非常流畅,因为它运行在不同的线程上,而不必依赖于 JavaScript 和渲染线程。

    1.2K40

    《前端面试加分项目》系列 企业级Vue瀑布流

    是比较流行的一种网站页面布局,视觉表现为宽度相等高度不定的元素组成的参差不齐的多栏布局,随着页面向下滚动,新的元素附加到最短的一列而不断向下加载。...瀑布流的使用场景【我们看下面**某国内知名企业的首页gif图】 瀑布流滑动的时候会不停的出现新的东西,吸引你不断向下探索,巧妙的利用视觉层级,视线的任意流动来缓解视觉的疲劳,采用这种方案可以延长用户停留视觉...何时渲染 选择渲染的区域为滚动高度+可视区域高度的1.5倍,即可以防止用户滚动到底部的时候白屏,也可以防止渲染过多影响用户体验。...瀑布流渲染核心思路 监测滚动,判断是否符合渲染条件,如果符合条件则开始渲染。...定义一个渲染索引renderIndex, 每渲染一个元素则renderIndex+1, 实时监测renderIndex的变化, 判断是否符合渲染和数据请求条件。

    99300

    Chrome 的下一代 Web 渲染架构:RenderingNG

    只执行显示可见内容所需的工作。 内置对通用视觉设计、动画和交互设计模式的支持。 为开发者提供 API 轻松管理渲染开销。 为开发者插件提供渲染管线扩展点。...所有的核心功能和基础都必须正常工作,并且能在长时间的情况下稳定运行。同样重要的是,这些功能组合得很好并且没有奇怪的边界错误(这里有内涵到?)。...这称之为向上扩展 — 利用硬件设备可以实现的所有功能,然后向下扩展 — 在需要时最大限度地提高效率并减少对系统的需求。...浏览器中最著名的缓存类型是 HTTP 缓存,但渲染也有很多缓存。滚动最重要的缓存是缓存的 GPU 纹理和显示列表,它允许非常快的滚动,同时最大限度地减少电池消耗并在各种设备上运行良好。...在 Web 上,性能隔离的最佳示例就是滚动。即使在具有大量慢速的 JavaScript 的网站上,滚动也可以非常流畅,因为它运行在不同的线程上,而不必依赖于 JavaScript 和渲染线程。

    46630
    领券