主题:Timer控件和自定义的延时函数该用哪一个???
天天学习
[专家分:4570] 发布于 2008-03-28 21:23:00
Dim start As Date
For i = 1 To n
start = Timer
Debug.Print i
Web.Navigate AdList.ListItems(i).SubItems(2)
Do Until Timer >= start + 4
DoEvents
Loop
Debug.Print "then ,web.stop"
Web.Stop
start = Timer
Do Until Timer >= start + 35
DoEvents
Loop
Debug.Print "finish one ad"
Next
目的是为了按定好的操作规则(打开某网站,4秒后点停止,之后再等35秒,离开网站,访问下一个)访问listView里列出的网站.
本来准备放在Timer控件里,但发现通过自已定义的延时处理过程(do until ...loop)好像更方便。
但一运行,发现反应有点慢,在开发环境下运行时,有时候点了关闭按钮要隔一会才能反应过来。而且程序同时有3个webbrowser控件在这样运行!
PS:放到Timer里也一样。
回复列表 (共6个回复)
沙发
tanchuhan [专家分:15140] 发布于 2008-03-28 21:37:00
用来收广告点击费的吧?
几点建议:
1、最好把延时代码抽出来做成一个函数,简明易用:
Private Sub Wait(ByVal nSec [color=0000FF]As Long[/color])
[color=FF0000] nSec = Timer + nSec
Do Until Timer > nSec[/color]
DoEvents
Loop
End Sub
2、关闭延迟退出的问题:
Private Sub Form_Unload(Cancel As Integer)
End
End Sub
3、如果仅仅是为了访问广告网页,赚取点击数,可以用XMLHTTP对象来载入页面,因为仅仅载入文本,速度快很多,而且也好控制。
板凳
天天学习 [专家分:4570] 发布于 2008-03-29 11:20:00
[quote]用来收广告点击费的吧?[/quote]
到底是见多识广啊。
没想到的是,用这个自动访问它的广告页面后,第二天就被封号了[em10][em10]
真不知道这网站是怎么识别出来是人工点击还是自动点击的??
不知道是不是与 <a hrf="....." target=clickwindow>中的target有关。在网页源文件的相应位置并没有发现其他过程调用,比如给服务器方传递个参数啥的啊。
另外,发现通过重新输入URL访问和通过点击来访问,它们的Session也不一样,这也许是出现这种情况的最可能的原因。如下图,先登录本站,然后获取某个贴子的URL,直接点链接来访问时显示是已经登录,但重新打开一个IE,输入URL地址来访问,显示的是没有登录。
但那个广告网站每次显示的是已经登录的,照理说是同一session的呀。
我的代码如下:
Dim doc As HTMLDocument
Dim link As HTMLLinkElement
Set doc = Web.Document
'根据每个link的父标签是否为parentName以及链接的URL中是否出现Keyword,筛选Url,添加到ListView里。
For Each link In doc.links
Debug.Print link.toString
If UCase(link.parentElement.tagName) = UCase(parentName) And InStr(1, link.toString, keyword) <> 0 And link.outerText <> "" Then
AdList.ListItems.Add
With AdList.ListItems(AdList.ListItems.Count)
.SubItems(1) = AdList.ListItems.Count
.SubItems(2) = link.toString
.SubItems(5) = link.outerText
.SubItems(4) = link.Target
End With
End If
Next
Set link = Nothing
Set doc = Nothing
访问时,直接用Web.Navigate AdList.ListItems(i).SubItems(2)
另外,为了在人工点击时不出现新窗口
Private Sub Web_NewWindow2(ppDisp As Object, Cancel As Boolean)
On Error GoTo errHandle
Set ppDisp = Web.Object
errHandle:
End Sub
[em10][em10]
<a href="post-271327.html" [color=red]target="_blank"[/color] >请问如何得到Sql语句的返回值?</a>
[img]http://file.pfan.cn/upfile/200803291204364.rar[/img]
再重新注册一个,再试一试,如果不行,只有GameOver了。
3 楼
tanchuhan [专家分:15140] 发布于 2008-03-29 17:32:00
咱们合作,我提供技术支持,你去操作,俩人分成,怎么样?哈哈哈
忘了说,别给我打分,我想保持9990分,所以千万别打分。谢谢了
4 楼
天天学习 [专家分:4570] 发布于 2008-04-04 17:06:00
试用了网上流传的SuperClick,结果还是一样的封号!真郁闷~~~~。
不知道那网站是怎么识别的??!!!应该不是靠 点击频率 来判断的,因为我程序里的点击频率用随机函数的方法来模拟一个合理的人工点击的范围了,不是固定的。论速度,比人工点击有时候都慢。
[em10][em10][em10]按理说说webbrowser控件已经把session,cookie之类的都完全封装好了的,不用用户来操心了,怎么还会出现这种情况?
PS:回想起来了,我每次封号,访问广告页面都是先把url提取出来,再用的web.navigate方法来访问。记得前两天把访问的方式改为link.Click,把新的url显示到另一个webbrowser里,结果两天都没封号,今天觉得一个控件里就要两个webborwser,有点浪费资源,又给改回到navigate方法,一下子就封了,难道是这个原因?!!!,再试试。
5 楼
bcahzvip [专家分:6040] 发布于 2008-04-04 18:06:00
有没有想过同一IP同一账号的过分连接呢?
6 楼
天天学习 [专家分:4570] 发布于 2008-04-04 19:48:00
网站确实记录了账号的IP地址。同一IP地址只能[color=red]申请[/color]一个账号。用其它IP地址申请的帐号也可以在不同IP地址地电脑上登录,操作,这样并不会封号,这一点我用手工点击的方式试过。
至于链接,link.click和web.navigate [链接的url]方式访问,结果一个导致很快封号,一个不会(至少暂时看来不会),原因也许是在链接的click事件中还执行了一些代码,onclick="..." ,或者onServerClick="..."。而用web.navigate直接打开url时,这部分代码却没有执行。(很可能这些代码就是含有验证信息的。)
试试再说
我来回复