[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 yu2n 于 2015-4-19 10:34 编辑

1. 提取内容没有问题。
2. 计算几个项目——这个就有点强人所难。毕竟贵公司考勤算法,不是谁都能完全猜得对的。题主需要提供考勤算法。

以下代码供参考,将提取网页 "Attendence Detail.htm"中"tblDetail"表格的所有内容。
  1. htmlfile = "Attendence Detail.htm"
  2. Dim fso, sHtml, oHTML
  3. Set fso = CreateObject("Scripting.FilesystemObject")
  4. Set oHTML = CreateObject("htmlfile")
  5. sHtml = fso.OpenTextFile(htmlfile, 1, False, 0).ReadAll
  6. oHTML.DesignMode = "on"     ' 开启编辑模式,所有js都不会被执行
  7. oHTML.Write sHtml           ' 写入数据
  8. 'MsgBox objHTML.body.InnerHTML
  9. Dim oTable, sTable, nRow, nCol, sLine, sCell
  10. Set oTable = oHTML.getElementById("tblDetail")
  11. If Not oTable Is Nothing Then
  12.   For nRow = 0 To oTable.rows.length - 1
  13.     For nCol = 0 To oTable.rows(nRow).cells.length- 1
  14.       sCell = oTable.rows(nRow).cells(nCol).innerText
  15.       If sLine <> "" Then sLine = sLine & ","
  16.       sLine = sLine & sCell
  17.       sCell = ""
  18.     Next
  19.     If sTable <> "" Then sTable = sTable & vbCrLf
  20.     sTable = sTable & sLine
  21.     sLine = ""
  22.   Next
  23.   
  24. End If
  25. fso.OpenTextFile(htmlfile & ".log", 2, True, 0).Write sTable
  26. MsgBox sTable
复制代码
结果如下:
  1. 日期,日期类型,进1,出1,进2,出2,进3,出3,进4,出4,工时类别,缺勤,迟到,早退,实际工作时间,加班类别1,加班单小时1,审核加班小时1,加班类别2,加班单小时2,审核加班小时2,休假类别,休假小时,进5,出5,进6,出6,进7,出7,进8,出8,进9,出9,进10,出10
  2. 2015/03/24,星期二,06:50,11:47,12:24,17:36, , , , ,E&E早班, , , ,8.00,平日加班,3.00,3.00, , , , , , , , , , , , , , , , ,
  3. 2015/03/25,星期三,06:52,11:38,12:14,17:29, , , , ,E&E早班, , , ,8.00,平日加班,3.00,3.00, , , , , , , , , , , , , , , , ,
  4. 2015/03/26,星期四,07:04,11:36,11:55,17:17, , , , ,E&E早班, , , ,8.00,平日加班,2.50,2.50, , , , , , , , , , , , , , , , ,
  5. 2015/03/27,星期五,06:57,11:28,12:04,17:27, , , , ,E&E早班, , , ,8.00,平日加班,3.00,3.00, , , , , , , , , , , , , , , , ,
  6. 2015/03/28,星期六, , , , , , , , ,REST, , , , , , , , , , , , , , , , , , , , , , , ,
  7. 2015/03/29,星期日, , , , , , , , ,REST, , , , , , , , , , , , , , , , , , , , , , , ,
  8. 2015/03/30,星期一, , , , , , , , ,E&E早班, , , , , , , , , , ,固定年假换休假,8.00, , , , , , , , , , , ,
  9. 2015/03/31,星期二, , , , , , , , ,E&E早班, , , , , , , , , , ,事假,8.00, , , , , , , , , , , ,
  10. 2015/04/01,星期三,06:50,11:35,12:06,17:28, , , , ,E&E早班, , , ,8.00,平日加班,3.00,3.00, , , , , , , , , , , , , , , , ,
  11. 2015/04/02,星期四,07:03,11:40,12:15,17:31, , , , ,E&E早班, , , ,8.00,平日加班,3.00,3.00, , , , , , , , , , , , , , , , ,
  12. 2015/04/03,星期五,06:55,11:38,12:13,17:34, , , , ,E&E早班, , , ,8.00,平日加班,3.00,3.00, , , , , , , , , , , , , , , , ,
  13. 2015/04/04,星期六,06:47,11:15,11:48,18:30, , , , ,REST, , , , ,公休日加班,12.00,12.00, , , , , , , , , , , , , , , , ,
  14. 2015/04/05,星期日, , , , , , , , ,REST, , , , , , , , , , , , , , , , , , , , , , , ,
  15. 2015/04/06,星期一, , , , , , , , ,REST, , , , , , , , , , , , , , , , , , , , , , , ,
  16. 2015/04/07,星期二, , , , , , , , ,E&E早班, , , , , , , , , , ,固定年假,8.00, , , , , , , , , , , ,
  17. 2015/04/08,星期三,06:59,07:37,07:45,11:40,12:14,17:33, , ,E&E早班, , , ,8.00,平日加班,3.00,3.00, , , , , , , , , , , , , , , , ,
  18. 2015/04/09,星期四,07:02,11:30,12:01,13:13,14:51,17:16, , ,E&E早班, , , ,8.00,平日加班,3.00,2.50, , , , , , , , , , , , , , , , ,
  19. 2015/04/10,星期五,07:03,11:34,11:58,17:28, , , , ,E&E早班, , , ,8.00,平日加班,3.00,3.00, , , , , , , , , , , , , , , , ,
  20. 2015/04/11,星期六,07:13,11:26,11:50,18:32, , , , ,REST, , , , ,公休日加班,12.00,12.00, , , , , , , , , , , , , , , , ,
  21. 2015/04/12,星期日, , , , , , , , ,REST, , , , , , , , , , , , , , , , , , , , , , , ,
  22. 2015/04/13,星期一,06:53,11:38,12:11,14:02,14:23,17:34, , ,E&E早班, , , ,8.00, , , , , , , , , , , , , , , , , , , ,
  23. 2015/04/14,星期二,07:05,11:34,12:03,17:28, , , , ,E&E早班, , , ,8.00, , , , , , , , , , , , , , , , , , , ,
  24. 2015/04/15,星期三,07:01,11:36,12:05,17:33, , , , ,E&E早班, , , ,8.00, , , , , , , , , , , , , , , , , , , ,
  25. 2015/04/16,星期四,07:04,11:33,12:05,17:29, , , , ,E&E早班, , , ,8.00, , , , , , , , , , , , , , , , , , , ,
  26. 2015/04/17,星期五,07:04, , , , , , , ,E&E早班,8.00, , , , , , , , , , , , , , , , , , , , , , ,
  27. , , , , , , , , , , ,8.00, , ,112.00, ,53.50,53.00, , , , ,24.00, , , , , , , , , , , ,
复制代码
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

本帖最后由 yu2n 于 2015-4-20 16:08 编辑

如果一个复杂的表达式可以拆分来写,尽量拆分。这样比较容易排错,代码也清晰易懂。

假设有一多行字符串 s ,需要获取最后一行,可如下处理:
  1. s = "a" & vbCrLf & "b" & vbCr & "C" & vbLf & "D"
  2. s = Replace(s, vbCr, vbLf)    ' 统一换行符
  3. s = Replace(s, vbLf, vbLf)
  4. arr = Split(s, vbLf)           ' 以换行符vbLf分割,将字符串转为数组
  5. s = arr(UBound(arr))           ' 获取数组最后一个元素
  6. MsgBox s
复制代码
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

登录的话,如果自动化代价太高,还是手工登录吧。参考 12306 验证码,不要花太多力气在这里。

思路的话,随便扯扯。

1. 登录方式未知,某些登录方式自动化代价太高,需要手工登录。
基础验证,安全性最低,但是很多组件都支持带账户验证,编程比较方便。
非基础验证...
带验证码...手工登录的话,下个步骤建议直接用 InternetExplorer.Application 来实现 BS 交互获取内容。

2. 分析通信方式、数据结构,确定使用哪个组件来获取登录后的网页内容。
InternetExplorer.Application?WinHTTP?Msxml2.ServerXMLHTTP?

3.  验证数据。

...
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

本帖最后由 yu2n 于 2015-4-21 19:13 编辑

回复 9# boyangcoco


VBS 示例:
  1. 'document.getElementById 示例:获取 ID 为 XX_ID 的网页内容
  2. ie.document.getElementById("XX_ID").innerHTML
  3. 'document.getElementsByName 示例:获取 NAME 为 XX_NAME 的网页内容
  4. ie.document.getElementsByName("XX_NAME").innerHTML
  5. 'document.getElementsByTagName 示例:遍历所有 div 节点,查找 class 为 yu2n 的节点
  6. For Each o In  ie.document.getElementsByTagName("div")
  7.   If o.className = "yu2n" Then
  8.     Msgbox o.parentNode.innerHTML
  9.     Exit For
  10.   End If
  11. Next
  12. 'document.all 示例:遍历所有节点,查找 class 为 yu2n 的节点
  13. For Each o In ie.document.all
  14.   If o.className = "yu2n" Then
  15.     Msgbox o.parentNode.innerHTML
  16.     Exit For
  17.   End If
  18. Next
复制代码
  1. '获取 dom 节点后,定位该节点相关的 dom 节点
  2. o.childNodes  '得到s的全部子节点
  3. o.parentNode   '得到s的父节点
  4. o.nextSbiling   '获得s的下一个兄弟节点
  5. o.previousSbiling  '得到s的上一个兄弟节点
  6. o.firstChild   '获得s的第一个子节点
  7. o.lastChile   '获得s的最后一个子节点
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

返回列表