出现几个问题:
1、webtable对象使用webtable.rowcount,总是说只有一行,返回的总是1。但是直接这样遍历取值又取到了值
for i =1 to 16
str=Brows("XXXX").page("XXX").WebTable("XXXX").GetCellData(i,1)
msgbox str
next
全部都能取到值。但是为什么webtable.rowcount就是1???????这样导致一个问题,我不能知道表格有多少行了,不能控制循环。
2、将取到的值写入到Excel里面,写入是写入进去了,但是过程中怎么产生了。temp文件,关闭了Excel之后仍然说temp文件被使用,不能删除。关QTP也删除不了,是不是大家写Excel都会产生temp文件?主要写Excel代码如下:
set xlsobj=createobject("excel.application") '创建excel对象
set xlsbook=xlsobj.Workbooks.Open("C:\Documents and Settings\Administrator\桌面\Book1.xlsx") ‘打开指定的excel文件
Set xlssheet=xlsbook.Sheets("sheet1") ’设置操作sheet对象,可使用index-从1开始
xlssheet.cells(1,1)=1 ‘对第一列的第一行赋值
xlsbook.Save ’保存excel文件
xlsbook.Close ‘关闭
创建,保存,关闭,统统都是放在写数据循环之外的。
'使用前最好关闭浏览器,先开QTP
Set IEBrowser = CreateObject("InternetExplorer.Application")
IEBrowser.Visible = True
IEBrowser.Navigate "http://zx.taobao.com/detail.htm?id=11204926" '导航到的URL,换别的地址就行
'换别的地址要注意该这里的Browse title 名字和page title名字,只统计你们的模版市场不需要改
set myPage=Browser("micclass:=Browser","title:=.*模板详情 - 店铺装修市场 – 淘宝网").Page("micclass:=Page","title:=.*模板详情 - 店铺装修市场 – 淘宝网")
'等待页面加载
myPage.Sync
'点击成交记录
myPage.WebElement("micclass:=WebElement","innertext:=成交记录").Click
'获得多少页记录
pageText=myPage.WebElement("micclass:=WebElement","innertext:=.*共.*条 / 共 .* 页").GetROProperty("innertext")
startIndex=InStr(pageText,"/ 共")+3
endIndex=InStr(pageText,"页")-1
l=endIndex-startIndex
pageStr=trim (mid(pageText,startIndex,l))
pageNum=Cint(pageStr)
'msgbox pageNum
myPage.WebTable("micclass:=WebTable","html tag:=TABLE","column names:=买家;出价;成交时间;状态").Click
'开始写入到Excel,先创建excel文件,地址放对。
set xlsobj=createobject("excel.application") '创建excel对象
set xlsbook=xlsobj.Workbooks.Open("C:\Users\Administrator\Desktop\book1.xlsx") '打开指定的excel文件
Set xlssheet=xlsbook.Sheets("sheet1") '设置操作sheet对象,可使用index-从1开始
'设置表头
xlssheet.cells(1,1)="买家"
xlssheet.cells(1,2)="出价"
xlssheet.cells(1,3)="成交时间"
xlssheet.cells(1,4)="状态"
'读取内容部分
k=0
j=0
Do while j< pageNum
For i=1 to 15
'判断是否有值
a= myPage.WebTable("micclass:=WebTable","html tag:=TABLE","column names:=买家;出价;成交时间;状态").GetCellData(i+1,1)
If a="ERROR: The specified cell does not exist." Then
Exit for
Exit Do
End If
'a= myPage.WebTable("micclass:=WebTable","html tag:=TABLE","column names:=买家;出价;成交时间;状态").GetCellData(i+1,1)
b= myPage.WebTable("micclass:=WebTable","html tag:=TABLE","column names:=买家;出价;成交时间;状态").GetCellData(i+1,2)
c= myPage.WebTable("micclass:=WebTable","html tag:=TABLE","column names:=买家;出价;成交时间;状态").GetCellData(i+1,3)
d= myPage.WebTable("micclass:=WebTable","html tag:=TABLE","column names:=买家;出价;成交时间;状态").GetCellData(i+1,4)
xlssheet.cells(i+k+1,1)=a
xlssheet.cells(i+k+1,2)=b
xlssheet.cells(i+k+1,3)=c
xlssheet.cells(i+k+1,4)=d
Next
k=k+15
j=j+1
If j=pageNum Then
Exit Do
End If
myPage.Link("micclass:=Link","name:=下一页").Click
Loop
'关闭Excel
xlsbook.Save
xlsbook.Close
xlsobj.Quit
set xlssheet=nothing
set xlsbook=nothing
set xlsobj=nothing作者: fly_away 时间: 2012-3-14 23:26
代码贴得不错,教育意义不是很大,更希望看到分析过程。
解决问题的思路才是关键,代码仅仅是一种体现形式而已。作者: wower1985 时间: 2012-3-15 20:48
解决过程其实没多少技术含量。。。。。。
1、关于问题1webtable.rowcount 取出来总是等于1,我没有管它,因为循环能取到表格下面的所有值。
关键是如何控制循环次数,列表数据总共有16行,直接写死,不用count。
2、关于翻页问题,最后一页时候会边灰,尝试过两个属性,运行时根本没有。解决方法是干脆从页面上获取有多少页,把页面上的webelement的innertext属性取出来,注意使用正则匹配,保证不同的页数也能取值,切割字符串,得到多少页。
3、控制循环,外层循环由页数控制,内层循环写死。
4、关于最后一页数据条数不确定怎么办。。。,,,这样处理:当QTP调用函数GetCellData(i,1)时,不存在值没有这一行时,会返回"ERROR: The specified cell does not exist." ,用这个字符来判断退出循环。
5、操作excel产生临时文件是因为没有释放用户,这么一句:xlsobj.Quit。连续的在excel里面写翻页数据行数就是内、外循环变量相加。