美文网首页网页抓取
利用winapi 抓取网页保存

利用winapi 抓取网页保存

作者: 蓝云风翼 | 来源:发表于2019-01-14 15:11 被阅读0次

首先本文要实现的是打开指定网页,右击保存为指定名.txt,网页保存类型为txt,后续再读取txt处理。

好下面准备工具:

1.spyxx(安装有VS的同学可以直接在vs安装目录下找到:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\spyxx.exe)

        查看spyxx窗口,找到另存为对话框窗口句柄。可知道每个以下子窗口句柄怎么通过win32api找到:

spyxx

2.确保已安装:selenium, win32gui, win32api, win32con(可通过相应pip安装)

3.下载geckodriver.exe (https://github.com/mozilla/geckodriver/releases/)下载完成后拷贝至Mozilla Firefox安装目录(C:\Program Files\Mozilla Firefox),确保Mozilla Firefox安装目录在环境变量PATH中。

4. 代码:

from selenium import webdriver

import win32gui, win32api, win32con

def save_url(driver, URL_BASE , saved_file_name):

    driver.get(URL_BASE)

    win32api.keybd_event(VK_CODE['ctrl'], 0, 0)

    win32api.keybd_event(VK_CODE['s'], 0, 0)

    win32api.keybd_event(VK_CODE['ctrl'], 0, win32con.KEYEVENTF_KEYUP,0)

    win32api.keybd_event(VK_CODE['s'], 0, win32con.KEYEVENTF_KEYUP,0)

    time.sleep(0.5)

    hld=win32gui.FindWindow("#32770", u"另存为")

    win32gui.SetForegroundWindow(hld)

    #left, top, right, bottom = win32gui.GetWindowRect(hld)

    #hwndChildList = []

    #win32gui.EnumChildWindows(hld, lambda hwnd, param: param.append(hwnd),  hwndChildList)

    #show_windows(hwndChildList)

    #获取文件名输入框

    a1 = win32gui.FindWindowEx(hld,None,'DUIViewWndClassName',None)

    a2 = win32gui.FindWindowEx(a1,None,"DirectUIHWND",None)

    a3 = win32gui.FindWindowEx(a2,None,"FloatNotifySink",None)

    a4 = win32gui.FindWindowEx(a3,None,"ComboBox",None)

    hwnd_filename = win32gui.FindWindowEx(a4,None,"Edit",None)

    a31 = win32gui.FindWindowEx(a2,a3,"FloatNotifySink",None)

    a32 = win32gui.FindWindowEx(a2,a31,"FloatNotifySink",None)

    a5 = win32gui.FindWindowEx(a32,None,"ComboBox",None)

    time.sleep(0.5)

    #输入保存文件名

    win32gui.SendMessage(hwnd_filename, win32con.WM_SETFOCUS,0,0)

    win32gui.SendMessage(hwnd_filename, win32con.WM_SETTEXT, None, saved_file_name)

    #修改保存类型

    win32api.SendMessage(a5, win32con.CB_SHOWDROPDOWN , 1,0)

    win32api.SendMessage(a5, win32con.CB_SETCURSEL , 2,0) #选择第二个下拉单

    win32gui.SendMessage(a5, win32con.WM_SETFOCUS,0,0)

    win32gui.SendMessage(a5, win32con.WM_LBUTTONDOWN, 0, 0)

    win32gui.SendMessage(a5, win32con.WM_LBUTTONUP, 0, 0)

    #win32gui.SendMessage(a5, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)

    #win32gui.SendMessage(a5, win32con.WM_KEYUP, win32con.VK_RETURN, 0)

    #win32gui.SendMessage(a5, win32con.CBN_SELCHANGE)

    #win32gui.SendMessage(a5, win32con.CBN_SELENDOK)

    win32gui.PostMessage(hwnd_filename, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)

    win32gui.PostMessage(hwnd_filename, win32con.WM_KEYUP, win32con.VK_RETURN, 0)

    time.sleep(0.5)

    #点击保存

    hwnd_save = win32gui.FindWindowEx(hld,None,"Button",None)

    win32gui.PostMessage(hwnd_save, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, 0)

    win32gui.PostMessage(hwnd_save, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, 0)

    #driver.quit()

下面就可以开始了:

driver = webdriver.Firefox()
save_url(driver, URL_BASE, saved_file_name)


相关文章

  • 利用winapi 抓取网页保存

    首先本文要实现的是打开指定网页,右击保存为指定名.txt,网页保存类型为txt,后续再读取txt处理。 好下面准备...

  • 搜索引擎的基本原理

    搜索引擎最初阶段: 利用网页爬虫进行抓取,通过网页中的链接层层深入,对网页去掉Tag后进行分词,保存每个单词在网页...

  • python库学习之Requests

    基本使用 抓取网页(文本) 抓取二进制数据(图片,音频,视频) 如果要保存图片

  • 利用R的XML`实现简单网页表格抓取

    [TOC] 1. XML包网页抓取 如果网页上有很多容易读取的表格,可以很方便利用XML包实现网页抓取。 网页语言...

  • 利用Nodejs抓取网上图片并保存至本地

    1)初步应用 利用http以及fs模块抓取网络数据保存至本地 2)利用爬虫抓取简书首页的文章链接及内容以及图片保存...

  • 2.模块简介

    其实学习爬虫也挺简单,主要就是三个步骤 1.抓取网页 2.分析网页3.保存数据 抓取网页urllib库urllib...

  • 从零开始学爬虫—urllib

    其实学习爬虫也挺简单,主要就是三个步骤 1.抓取网页 2.分析网页 3.保存数据 抓取网页 urllib库 url...

  • 28.用配合scrapy的方式爬取本地保存的html

    使用splash抓取js动态加载的网页,输出网页源代码,以html的格式保存到本地,然后编写个py文件抓取自己想要...

  • 网页抓取保存到本地和解析

    网页抓取保存到本地 savedata_Chrome_byurl.py from selenium import w...

  • urllib2库的简单使用

    网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地,在Python中有很多库可以用来抓取网页...

网友评论

    本文标题:利用winapi 抓取网页保存

    本文链接:https://www.haomeiwen.com/subject/pgaddqtx.html