pyppeteer实现不加载image,css等大文件, 缩短页面加载时间

简介: 常见问题及解决方案


frc-a1d2bbc8a5dec8b2ffda61c04ae5c93f.gif


需求背景



        在很多时候, 写爬虫的过程中, 不得不使用一些自动化工具来完成抓取, pyppeteer就是一个很好的选择, 一般情况下, 会选择页面加载完成后, 点击按钮等等, 但是有时候,  我们只需要其中的一些数据, 比如a标签的href, 其它的都不重要, 等待其它文件加载, 反而会影响爬虫的效率, 这时候, 就可以选择过滤一些无用文件的加载, 在缩短页面加载时间



代码



# -*- coding: utf-8 -*-
# @Author: Mehaei
# @Date: 2022-06-13 18:45:33
# @Last Modified by: Mehaei
# @Last Modified time: 2022-06-13 18:45:33
import asyncio
from pyppeteer import launch

class PageMiddleware(object):
@staticmethod
async def add_intercept(page):
await page.setRequestInterception(True)
page.on('request', PageMiddleware.intercept_request)
page.on('response', PageMiddleware.intercept_response)

@staticmethod
async def intercept_request(req):
print("request url", req.url)
print("request type", req.resourceType)
if req.resourceType in ['stylesheet', 'script', 'image', 'media', 'eventsource', 'websocket']:
await req.abort()
else:
await req.continue_()

@staticmethod
async def intercept_response(res):
resourceType = res.request.resourceType
print("response type", resourceType)

async def main():
browser = await launch(
headless=False
)
page = await browser.newPage()

await PageMiddleware.add_intercept(page)
await page.goto("https://www.baidu.com")


if __name__ == "__main__":
io_loop = asyncio.get_event_loop()
    io_loop.run_until_complete(main())


这样就可以实现过滤不需要的请求, 和处理响应内容



其它问题及解决



1 设置浏览器最大化



    browser = await launch(
headless=False,
# 浏览器铺满屏幕
# args=['--start-fullscreen'],
# 窗口在浏览器中最大化(mac测试无效)
# args=['--start-maximized']
)
page = await browser.newPage()
# 设置页面显示区域大小
# await page.setViewport({
# "width": 1024,
# "height": 963
# })



2 页面超时

有时候, 页面明明已经加载完成了, 但还是会报超时错误

Navigation Timeout Exceeded: 30000 ms exceeded.

解决

pip3 install websockets==6.0 --force-reinstall



3 移除自动化提示框


移除 Chrom正受到自动测试软件的控制提示

from pyppeteer import launcher
try:
launcher.AUTOMATION_ARGS.remove("--enable-automation")
except:
pass
try:
launcher.DEFAULT_ARGS.remove("--enable-automation")
except:
pass
from pyppeteer import launch


文章来源于公众号: pyppeteer实现不加载image,css等大文件, 缩短页面加载时间
目录
相关文章
|
2月前
|
前端开发
在Webpack配置文件中,如何配置loader以处理其他类型的文件,如CSS或图片
在Webpack配置文件中,通过设置`module.rules`来配置loader处理不同类型的文件。例如,使用`css-loader`和`style-loader`处理CSS文件,使用`file-loader`或`url-loader`处理图片等资源文件。配置示例:在`rules`数组中添加对应规则,指定`test`匹配文件类型,`use`指定使用的loader。
|
2月前
|
前端开发 UED 开发者
CSS Sprites和图标字体在网页图标加载优化中的应用。CSS Sprites通过合并多图标减少HTTP请求,提升加载速度
本文探讨了CSS Sprites和图标字体在网页图标加载优化中的应用。CSS Sprites通过合并多图标减少HTTP请求,提升加载速度;图标字体则以字体形式呈现图标,便于调整样式。文章分析了两者的优缺点及应用场景,并提供了应用技巧和注意事项,旨在帮助开发者提升页面性能,改善用户体验。
42 5
|
2月前
纯css3加载loading发光变色动画代码
纯css3加载loading发光变色动画特效代码是一款基于css3 keyframes属性实现的发光变色圆点串联旋转loading加载动画
30 2
|
2月前
|
Web App开发 前端开发 iOS开发
CSS加载动画大全 126种
CSS加载动画大全是一个css Loaders加载动画特效汇总,一共包含126种加载动画效果,不同样式不同图案,简单实用,一览包含所有,会让你在等待的过程中,体验视觉盛宴,给用户不一般的加载体验,欢迎下载试试!代码适用浏览器:搜狗、360、FireFox(建议)、Chrome、Safari、Opera、傲游、世界之窗,是一款不错的的特效插件,希望大家喜欢!
39 2
|
2月前
|
缓存 前端开发 JavaScript
优化CSS和JavaScript加载
优化CSS和JavaScript加载
|
2月前
|
缓存 前端开发 JavaScript
优化CSS和JavaScript加载
Next.js和Nuxt.js在优化CSS和JavaScript加载方面提供了多种策略和工具。Next.js通过代码拆分、图片优化和特定的CSS/JavaScript优化措施提升性能;Nuxt.js则通过代码分割、懒加载、预渲染静态页面、Webpack配置和服务端缓存来实现优化。两者均能有效提高应用性能。
|
3月前
|
前端开发
【CSS】纯css3螺旋状loading加载特效
【CSS】纯css3螺旋状loading加载特效
38 4
|
5月前
|
前端开发 JavaScript
开发过程找不到css源文件?试试配置vite的css源文件映射
【8月更文挑战第3天】开发过程找不到css源文件?试试配置vite的css源文件映射
103 0
|
5月前
|
Java Spring 数据库
怎样动动手指就能实现数据操作?Spring Data JPA背后的魔法揭秘
【8月更文挑战第31天】在Java开发中,数据库交互至关重要。传统的JDBC操作繁琐且难维护,而Spring Data JPA作为集成JPA的数据访问层解决方案,提供了CRUD等通用操作接口,显著减少代码量。通过继承`JpaRepository`,开发者能轻松实现数据的增删改查,甚至复杂查询和分页也不再困难。本文将通过示例详细介绍如何利用Spring Data JPA简化数据访问层的开发,提升代码质量和可维护性。
55 0
|
5月前
|
前端开发 JavaScript Linux
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败