需求:单纯的将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如何打包静态网页并下载相关推荐

  1. python下载整个网站_python – Selenium下载整个HTML

    我一直在尝试使用硒来刮擦整个网页.我希望它们中至少有一小部分是水疗中心,如Angular,React,Vue,所以这就是我使用Selenium的原因. 我需要下载整个页面(如果某些内容没有从延迟加载加 ...

  2. python批量下载静态页面_Python静态网页爬取:批量获取高清壁纸

    前言 在设计爬虫项目的时候,首先要在脑内明确人工浏览页面获得图片时的步骤 一般地,我们去网上批量打开壁纸的时候一般操作如下: 1.打开壁纸网页 2.单击壁纸图(打开指定壁纸的页面) 3.选择分辨率(我 ...

  3. python手机壁纸超清_Python爬虫-王者荣耀高清壁纸下载

    绪论 网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.python是一种跨平台的计算机程序设计语言.是一种 ...

  4. python批量读取dat文件_python编写Windows环境下批量修改文件名

    在日常编程工作中我们经常需要对文件进行操作,而文件一般都是由文件名和扩展名组成的.比如我们经常需要把.dat 格式 转化成 .txt格式,把png改成jgp格式等等.这里我们就教大家如何利用PYTHO ...

  5. python批量ping50台服务器_Python小技巧—批量ping的方法

    在日常的工作中,我们通常会有去探测目标主机是否存活的应用场景,单个的服务器主机可以通过计算机自带的DOS命令来执行,但是业务的存在往往不是单个存在的,通常都是需要去探测C段的主机(同一个网段下的存活主 ...

  6. python批量新建文件夹_python批量创建指定名称的文件夹

    本文实例为大家分享了python批量创建指定名称的文件夹具体代码,供大家参考,具体内容如下 继删除多余文件之后,做了一些数据处理,需要重新保存数据,但文件夹的名称又不能改 所以只能创建新的文件夹,换个 ...

  7. python批量解压文件_python 批量解压压缩文件的实例代码

    下面给大家介绍python 批量解压压缩文件的实例代码,代码如下所述: #/usr/bin/python#coding=utf-8import os,sys import zipfile open_p ...

  8. 怎样用python批量处理文件夹_python批量处理文件或文件夹

    本文实例为大家分享了python批量处理文件或文件夹的具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- import os,shutil import sys imp ...

  9. python批量生成word报告_Python操作Word批量生成合同的实现示例

    背景:大约有3K家商家需要重新确认信息并签订合同.合同是统一的Word版本.每个供应商需要修改合同内的金额部分.人工处理方式需要每个复制粘贴且金额要生成大写金额.基于重复工作可偷懒.用Python解救 ...

  10. python批量处理excel数据_Python批量处理Excel,真香(超实用!)

    本文介绍了利用Python批量处理Excel文件的一种方法,超实用,超简单.轻松可实现,节省时间不只一点点.文章不长,功能超强. 上菜. 某一天,老板丢个我一个任务.需要将400多张表按照一定条件进行 ...

最新文章

  1. R语言ggplot2可视化在可视化图像中添加上限线条、下限线条、添加上下限图例实战
  2. 抽象类与接口 day-11.2
  3. Apache以及PHP的默认编码问题解决(详解)
  4. 发现几个常用的asp.net MVC Helper 源码
  5. LeetCode删除排序数组中的重复项(Java实现)
  6. 多维数据库介绍【转】
  7. vector中resize和reserve接口的异同
  8. 【报告分享】2021上半年短视频及电商生态研究报告.pdf(附下载链接)
  9. CentOS网络问题汇总
  10. unity改变物体轴心
  11. java_home not found in your enviroment 问题解决方法
  12. 又是一岁,又是一年,又是新的开端【我与51CTO的故事】
  13. xpath 获取表单的值
  14. 红帽 linux 安装gns3,Linux下安装GNS3
  15. Xshell安装教程-Xshell 6 个人版安装与远程操作连接服务器
  16. Android开发环境配置
  17. Java进阶总结——集合框架
  18. 语c语言描写,语c动作描写
  19. matlab三维画图总结
  20. 『牛角书』基于JS实现的鸿蒙游戏——二十四点纸牌

热门文章

  1. 【转】 Android xml中 @和?区别,style和attr小结
  2. 环境配置就是安装软件,修改软件的配置文件,安装软件就是文件的复制,与新增--linux下一切皆文件...
  3. 利用JDBC开发图书管理系统
  4. Java静态变量小感
  5. 【PHP基础】PHP接口调用与json数据处理
  6. 投票最喜欢报表模板,赢取复联3正版玩偶
  7. Ubuntu 16.04重启Nautilus
  8. Fisher-Yates 乱序算法
  9. ARM中C和汇编混合编程及示例(转)
  10. PHP+Apache+MySQL+phpMyAdmin在win7系统下的环境配置