参考下面范例
Sub Xpath定位() 'MSXML2.DOMDocument.6.0 Const str_Html As String = _ "<div id = ""outside"">" & _ "<div id =""box"">" & _ "<div id = ""head"" class = ""color0"">AAA</div>" & _ "<div id = ""body"" class = ""color1"">BBB</div>" & _ "<div id = ""footer1"" class = ""color1"">" & _ "<div id = ""footer2"" class = ""color2"">CCC</div>" & _ "</div>" & _ "</div>" & _ "</div>" Dim xmlDom As New MSXML2.DOMDocument60 '引用Microsoft xml,v6.0 ' Dim xmlDom As Object ' Set xmlDom = CreateObject("Msxml2.DOMDocument.6.0") If Not xmlDom.LoadXML(str_Html) Then MsgBox xmlDom.parseError.reason Set xmlDom = Nothing Exit Sub End If Debug.Print xmlDom.SelectSingleNode("//div/ @ id").Text '根路径下div id Debug.Print xmlDom.SelectSingleNode("//div/div/ @ id").Text Debug.Print xmlDom.SelectSingleNode("//div/div[ @ class = ""color1""]").Text Debug.Print xmlDom.SelectSingleNode("//div/div[ @ id=""body""]").Text Debug.Print xmlDom.SelectNodes("//div/div/@id")(0).Text Debug.Print xmlDom.SelectNodes("//div/div/@id")(2).Text Debug.Print xmlDom.SelectNodes("//div/div[@id=""footer2""]")(0).Text '只有一个结果 Debug.Print xmlDom.SelectNodes("//div [@id=""box""] /div [@class=""color1"" ] ")(0).Text Debug.Print xmlDom.SelectNodes("//div/div/@id")(0).XML Set xmlDom = Nothing End Sub
两种方式,一种需要本机Outlook配置好的,一种不需要,使用CDO
一、Outlook模式
该模式需要你电脑中有正常使用的Outlook,不是装了软件就可以了,要配置好正常能用
用例
Sub test() Set mm = New MailForOutlook s = mm.GenerateEmail("gnefnuy@qq.com", "主题:测试", "<b>加粗</b><br>测试", True) End Sub
用例,VBA的环境是GB2312的,直接MD5中文字符出来的会与实际通用的UTF8字符数据不一致,所以要先转UTF8再MD5
Sub test() Dim f As New MD5 Dim s As String s = "中文字" Debug.Print "ANSI:" & f.DigestStrToHexStr(s) Dim a() As Byte, b() As Byte a = s Debug.Print "GB2312:" & f.DigestByteToHexStr(a) Debug.Print "GB2312-UTF8:" & f.DigestByteToHexStr(Unicode_To_UTF8(a)) '这里的数据和网上在线MD5验证网站一致。 b = StrConv(s, vbFromUnicode) Debug.Print "ANSI-UTF8:" & f.DigestByteToHexStr(Unicode_To_UTF8(b)) End Sub
有时候还是用油猴方便,WebDriver考虑的太多
//获取元素,一直查询,直到找到为止,参数名称比较好理解 function getElement(parent, selector, timeout = 0) { return new Promise(resolve => { let result = parent.querySelector(selector); if (result) return resolve(result); let timer; const mutationObserver = window.MutationObserver || window.WebkitMutationObserver || window.MozMutationObserver; if (mutationObserver) { const observer = new mutationObserver(mutations => { for (let mutation of mutations) { for (let addedNode of mutation.addedNodes) { if (addedNode instanceof Element) { result = addedNode.matches(selector) ? addedNode : addedNode.querySelector(selector); if (result) { observer.disconnect(); timer && clearTimeout(timer); return resolve(result); } } } } }); observer.observe(parent, { childList: true, subtree: true }); if (timeout > 0) { timer = setTimeout(() => { observer.disconnect(); return resolve(null); }, timeout); } } else { const listener = e => { if (e.target instanceof Element) { result = e.target.matches(selector) ? e.target : e.target.querySelector(selector); if (result) { parent.removeEventListener('DOMNodeInserted', listener, true); timer && clearTimeout(timer); return resolve(result); } } }; parent.addEventListener('DOMNodeInserted', listener, true); if (timeout > 0) { timer = setTimeout(() => { parent.removeEventListener('DOMNodeInserted', listener, true); return resolve(null); }, timeout); } } }); }
Agisoft PhotoScan Pro
Agisoft Metashape Pro
手头有零几年的垃圾手机拍的视频,分辨率太低,打算提升以下画质,等我搞定显卡就动手,先收藏以下
视频补帧:DAIN(python)、Flowframes、Squirrel-RIFE Video Frame Interpolation
分辨率倍增:ESRGAN(python)
上色:DeOldify(python)
降噪:VirtualDub(C++)
图片无损放大:Waifu2x
视频修复集成工具:Topaz Video Enhance AI
把合并的数据文件放到一个文件夹内,选择数据→新建查询→从文件→从文件夹
选择刚才放数据的文件夹
接下来会看到有一列Content,内容是Binary
EOMONTH(TODAY(),0) 当月最后一天
EOMONTH(TODAY(),-1)+1 当月第一天
NOW()-DAY(NOW()) 上个月最后一天是哪天
NOW()-DAY(NOW())+1 当月第一天
EDATE(TODAY,1) 计算当前日期之后一个月的日期
EOMONTH(TODAY(),1) 计算下个月最后一天的日期
EOMONTH(TODAY(),0)-TODAY() 计算今天到本月底还有多少天