python批量下载静态页面_Python selenium如何打包静态网页并下载
需求:单纯的将page.source写入文件的方式,会导致一些图片无法显示,对于google浏览器,直接将页面打包下载成一个mhtml格式的文件,则可以进行离线下载。对应python selenium 微信公众号历史文章随手一点就返回首页?郁闷之下只好将他们都下载下来。:https://www.jb51.net/article/193111.htm
遇到的问题:
1、单纯使用webdriver.ActionChains无法完成下载动作,未能操作windows窗口。
2、没有找到相关能直接下载.mhtml的命名接口。
3、pywin32置顶窗口的使用不顺利。
解决思路:
1、使用selnium打开浏览器,不要操作,让其保持置顶
2、使用pyautogui、pyperclip操作键盘、鼠标、剪切板进行下载文件。
准备材料:
需要将自动化操作的一些图片截取下来,以作为后期图片匹配使用。
实现:
1、打开爬取好的链接,遍历所有需要下载的页面
# 读取文件
filename = r'data/01 爬取微信公众号历史文章/urls 二律背反的一灯如豆-out.xlsx'
df = pd.read_excel(filename,dtype=object)
df = df.reindex(columns=['日期', '标题', '原创', '地址','完成情况','储存地址'])
#df = df.head(5)
dfsel = (df['标题'] !='随文') & (df['完成情况'] != 1)
save_folder = r"I:\code\python\data\01 爬取微信公众号历史文章\01 二律背反的一灯如豆" + "\\"
# 设置保存格式为 mhtml,减少要操作文件保存下拉框的情况
options = webdriver.ChromeOptions()
options.add_argument('--save-page-as-mhtml')
# 启动浏览器
driver = webdriver.Chrome(options=options)
wait = WebDriverWait(driver,10)
df.loc[dfsel,"完成情况"],df.loc[dfsel,"储存地址"] = zip(*df[dfsel].apply(download_mhtml_with_not_check, axis=1,args=(driver,wait)))
2、编写相关下载页面函数
# 在timeout秒内,返回中心值,间隔时长time_setp
# 封装一个pyautogui限时查找函数
#
def finde_gui_element(png,timeout = 5,time_setp=0.2):
i = 1
if timeout <=0 : timeout = 5
if time_setp <=0 : time_setp = 0.2
while True:
if i > timeout/time_setp: return None
center = pyautogui.locateCenterOnScreen(png,grayscale=False,confidence=0.9)
if center == None:
time.sleep(0.2)
else:
return center
i = i + 1
主要自动化操作代码:
def download_mhtml_with_not_check(x,driver,wait):
name = ''
try:
url = str(x['地址'])
driver.get(url)
# 获取浏览器标题,用于检测是否是置顶页
wait.until(EC.presence_of_element_located((By.XPATH,'//h2[@id="activity-name"]')))
title = driver.find_element_by_xpath('//h2[@id="activity-name"]').text
print('no:',x.name,'url:',url,'title:',title)
wait.until(EC.presence_of_element_located((By.XPATH,'//div[@id="page-content"]')))
#进入下载
pyautogui.hotkey('ctrl', 's')
# 等待一下对话框弹出
time.sleep(1)
bt = finde_gui_element(r'data\png\save.png') #查找保存按键
if bt == None:
return (0,'')
else:
# 根据标题组合成具体路径
name = save_folder + ' ' + title + '.mhtml'
#print(name)
pyperclip.copy(name)
pyautogui.hotkey('ctrl', 'v')
time.sleep(0.1)
pyautogui.hotkey('Enter')
# 检查是否弹出另存为
bt = finde_gui_element(r'data\png\confirmsaveas.png',timeout=0.5)
if bt != None:
# 说明出现重复明明,点击覆盖
pyautogui.hotkey('Tab')
pyautogui.hotkey('Enter')
return (1,name)
bt = finde_gui_element(r'data\png\cancle.png',timeout=0.5)
if bt != None:
#还爱,说明出现了一些异常
pyautogui.hotkey('esc')
pyautogui.hotkey('esc')
pyautogui.leftClick(bt)
return (-1,name)
# 加多一个esc防止出现窗口还在
pyautogui.hotkey('esc')
except Exception as e:
print(str(e))
return (-2,name)
return (1,name)
最后写入excel:
通过vba代码,将单元格地址添加上超链接:
Option Explicit
Sub add_hype()
Dim ws As Worksheet, arr As Variant, i As Long
Set ws = ThisWorkbook.Worksheets(1)
arr = ws.UsedRange.Value
ws.Cells.Hyperlinks.Delete
For i = 2 To UBound(arr)
If CStr(arr(i, 2)) = "随文" Then
Else
If CStr(arr(i, 5)) = "1" Then
ws.Hyperlinks.Add Anchor:=ws.Cells(i, 6), Address:=CStr(arr(i, 6))
End If
End If
Next i
End Sub
完成。
不足之处:
1、通过autogui操作,难免会遇到弹窗的情况,需要增加活动窗体置顶,但是一直没有找到有效的方法。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
本文标题: Python selenium如何打包静态网页并下载
本文地址: http://www.cppcns.com/jiaoben/python/333278.html
python批量下载静态页面_Python selenium如何打包静态网页并下载相关推荐
- python下载整个网站_python – Selenium下载整个HTML
我一直在尝试使用硒来刮擦整个网页.我希望它们中至少有一小部分是水疗中心,如Angular,React,Vue,所以这就是我使用Selenium的原因. 我需要下载整个页面(如果某些内容没有从延迟加载加 ...
- python批量下载静态页面_Python静态网页爬取:批量获取高清壁纸
前言 在设计爬虫项目的时候,首先要在脑内明确人工浏览页面获得图片时的步骤 一般地,我们去网上批量打开壁纸的时候一般操作如下: 1.打开壁纸网页 2.单击壁纸图(打开指定壁纸的页面) 3.选择分辨率(我 ...
- python手机壁纸超清_Python爬虫-王者荣耀高清壁纸下载
绪论 网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.python是一种跨平台的计算机程序设计语言.是一种 ...
- python批量读取dat文件_python编写Windows环境下批量修改文件名
在日常编程工作中我们经常需要对文件进行操作,而文件一般都是由文件名和扩展名组成的.比如我们经常需要把.dat 格式 转化成 .txt格式,把png改成jgp格式等等.这里我们就教大家如何利用PYTHO ...
- python批量ping50台服务器_Python小技巧—批量ping的方法
在日常的工作中,我们通常会有去探测目标主机是否存活的应用场景,单个的服务器主机可以通过计算机自带的DOS命令来执行,但是业务的存在往往不是单个存在的,通常都是需要去探测C段的主机(同一个网段下的存活主 ...
- python批量新建文件夹_python批量创建指定名称的文件夹
本文实例为大家分享了python批量创建指定名称的文件夹具体代码,供大家参考,具体内容如下 继删除多余文件之后,做了一些数据处理,需要重新保存数据,但文件夹的名称又不能改 所以只能创建新的文件夹,换个 ...
- python批量解压文件_python 批量解压压缩文件的实例代码
下面给大家介绍python 批量解压压缩文件的实例代码,代码如下所述: #/usr/bin/python#coding=utf-8import os,sys import zipfile open_p ...
- 怎样用python批量处理文件夹_python批量处理文件或文件夹
本文实例为大家分享了python批量处理文件或文件夹的具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- import os,shutil import sys imp ...
- python批量生成word报告_Python操作Word批量生成合同的实现示例
背景:大约有3K家商家需要重新确认信息并签订合同.合同是统一的Word版本.每个供应商需要修改合同内的金额部分.人工处理方式需要每个复制粘贴且金额要生成大写金额.基于重复工作可偷懒.用Python解救 ...
- python批量处理excel数据_Python批量处理Excel,真香(超实用!)
本文介绍了利用Python批量处理Excel文件的一种方法,超实用,超简单.轻松可实现,节省时间不只一点点.文章不长,功能超强. 上菜. 某一天,老板丢个我一个任务.需要将400多张表按照一定条件进行 ...
最新文章
- R语言ggplot2可视化在可视化图像中添加上限线条、下限线条、添加上下限图例实战
- 抽象类与接口 day-11.2
- Apache以及PHP的默认编码问题解决(详解)
- 发现几个常用的asp.net MVC Helper 源码
- LeetCode删除排序数组中的重复项(Java实现)
- 多维数据库介绍【转】
- vector中resize和reserve接口的异同
- 【报告分享】2021上半年短视频及电商生态研究报告.pdf(附下载链接)
- CentOS网络问题汇总
- unity改变物体轴心
- java_home not found in your enviroment 问题解决方法
- 又是一岁,又是一年,又是新的开端【我与51CTO的故事】
- xpath 获取表单的值
- 红帽 linux 安装gns3,Linux下安装GNS3
- Xshell安装教程-Xshell 6 个人版安装与远程操作连接服务器
- Android开发环境配置
- Java进阶总结——集合框架
- 语c语言描写,语c动作描写
- matlab三维画图总结
- 『牛角书』基于JS实现的鸿蒙游戏——二十四点纸牌
热门文章
- 【转】 Android xml中 @和?区别,style和attr小结
- 环境配置就是安装软件,修改软件的配置文件,安装软件就是文件的复制,与新增--linux下一切皆文件...
- 利用JDBC开发图书管理系统
- Java静态变量小感
- 【PHP基础】PHP接口调用与json数据处理
- 投票最喜欢报表模板,赢取复联3正版玩偶
- Ubuntu 16.04重启Nautilus
- Fisher-Yates 乱序算法
- ARM中C和汇编混合编程及示例(转)
- PHP+Apache+MySQL+phpMyAdmin在win7系统下的环境配置