⽤程序来控制⼀个⽹页,实现⾃动输⼊等操作
附:看到有朋友⾃⼰弄的时候出错了,所以我做了两个demo,⼀个excel版,另⼀个c#版,有需要的朋友可以到⽂章最后下载参考⼀下。另外,⽂章改了⼀些疏漏。
⾸先今天要说的东西跟游戏⽆关,你是不是有时候会遇到,在某个⽹页上重复着⼏⼗次的简单⽽⼜⽆聊的录⼊或点击等⼯作?⽐如你的程序需要测试,需要注册⼤量的测试邮箱。⽐如你的⽼板是个变态,让你去各个论坛发⼤量的垃圾贴⼦(最⽆耻⾏为,纯属举例)。或者,你需要定时的到某⼀个⽹页上执⾏某⼀些⾏为,⽐如上班下班的出勤打卡系统,等等吧,
如果有,那么我今天所介绍的或许会对你有帮助。
当然,如果你要操作的这些⽹页都是⾃⼰开发的,那么⽆所谓了,你在多开发个⼯具就⾏了,但是我说的上⾯这些都是第三⽅的⽹页,你控制不了它们,如果遇到上上述情况,⽽你是⼀个挨踢程序员,⽽你⼜选择⽼⽼实实的重复着这些⽆聊⼜费时的⼯作,那你就真该挨踢了。 要实现这些功能,你只需要⽤程序控制这些⽹页,让⽹页听你的就⾏了。要动⼿实现这⼀系列的功能,你需要做⼏个简单的准备。
1,OS环境:Windows
2,IE浏览器
3,⼯具:Excel或者Visual Studio
先来看看如何⽤Excel来控制⼀个⽹页。
新建⼀个Excel并且进⼊VBA,标准模式,什么?不知道VBA?你可以我的两个⽼师问⼀下,他们⼀个姓百,另⼀个姓⾕,诶?你说你也认识?那⼤家都是⾃⼰⼈了,你什么时候请吃饭啊?
如下图。
我是⽇⽂系统,中⽂的你对照着⾃⼰来吧...
要对IE进⾏操作,⾸先需要引⼊两个插件
HTML Object Library
Microsoft Internet Controls
如图
打开IE,你只需要下⾯⼏⾏代码
Dim ie As Object
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
End Sub
⽐如我要打开百度,那就这样
ie.Navigate "www.baidu"
接着你需要等待页⾯加载
While ie.ReadyState <> 4 Or ie.Busy = True
DoEvents
Wend
好了,百度打开了,是不是很简单,不过你也会说,打开个⽹页算什么,随便⼀个程序都可以吧,好吧,咱们下⾯来实现⾃动搜索。 ⾸先,咱们⽤VBA在百度的输⼊框⾥输⼊⼏个⽂字,百度的输⼊框的代码如下
<input type="text" name="wd" id="kw1" maxlength="100" autocomplete="off">
那我们就可以通过这个id来对输⼊框进⾏输⼊,如下
ElementById("kw1").value = "hellow world"
如果你上⾯都没有出错的话,"hellow world"应该已经被加⼊到输⼊框⾥了。
那么下⾯⽤VBA来点击搜索按钮,进⾏搜索。百度的搜索按钮代码如下
<input type="submit" value="百度⼀下" id="su1" class="btn" οnmοusedοwn="this.className='btn btn_h'" οnmοuseοut="this.className='btn'">
看到id了吧,那就简单了,下⾯这样来点击它
ElementById("su1").click
怎么样,⾃动搜索完成了吧
当然,这只是⼀个最简单的例⼦⽽已,如果没有id怎么办?你也可以下下⾯这样⽤它
ie.document.all
ie.document.body
ElementsByName
ElementsByTagName
看到了吧,和JS很像,如果你不愿意查相关的API的话,那你就拿JS的操作⽅法往上⾯套⽤吧
下⾯来看另⼀个页⾯的结构,⽐如下⾯这样
<frameset cols="25%,50%,25%">
<frame src="frame_a.htm" />
<frame src="frame_b.htm" />
<frame src="frame_c.htm" />
</frameset>
</html>
如果你要操作这个页⾯的⼦页⾯,也很简单
Dim objFRAME As FramesCollection
Set objFRAME = ie.document.frames
Dim HW As HTMLWindow2
Set HW = objFRAME(1)
HW.document.all
...
这个是操作索引为1的⼦页⾯,当然你也可以循环所有的⼦页⾯,来做的要做的事。
上⾯所介绍的都是先打开⼀个页⾯,然后再进⾏操作,如果需要操作⼀个已经打开的页⾯,你需要这样。
Dim objShell As Object
Dim objIE As Object
Dim n As Integer
Set objShell = CreateObject("Shell.Application")
For n = objShell.Windows.Count To 1 Step -1
Set objIE = objShell.Windows(n - 1)
If objIE Is Nothing Then
Exit For
End If
If Right(UCase(objIE.FullName), 12) = "IEXPLORE.EXE" Then
Debug.Print objIE.document.URL '测试,输⼊URL
If objIE.document.URL = "www.baidu" Then '看看是不是你要的页⾯
'到你要操作的页⾯了,开始处理
End If
End If
Next
Set objShell = Nothing
excel就说这么多了。
下⾯⽤来做,既然前⾯⽤了VBA,这⾥我就不⽤VB再重复了,换⽤C#来实现。
html document是什么打开Visual Studio,新建⼀个项⽬,同样,这次你需要引⼊三个插件
HTML Object Library
Microsoft Internet Controls
Microsoft Shell Controls And Automation
如图
启动IE,并打开百度
SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer();ie.DocumentComplete += ie_DocumentComplete;//等待页⾯读取事件ie.Navigate("www.baidu");
ie.Visible = true;
等待页⾯读取你需要加⼀个事件
private void ie_DocumentComplete(object pDisp, ref object URL) {
ie_Read = true;
}
然后在设置了URL之后,调⽤下⾯的compWait();函数进⾏等待
private bool ie_Read = false;
private void compWait()
{
while (ie_Read != true)
{
Application.DoEvents();
}
}
获取Document
shtml.HTMLDocument doc = ie.Document;
同样,在输⼊框⾥输⼊⽂字
开始搜索。
下⾯利⽤c#如何来操作已经打开的浏览器呢?看下⾯代码
public static SHDocVw.InternetExplorer getInternetExploer(string url) {
var shell = new Shell32.Shell();
var windows = (SHDocVw.IShellWindows)shell.Windows();
SHDocVw.InternetExplorer ie;
foreach (object window in windows)
{
ie = window as SHDocVw.InternetExplorer;
if (ie != null &&
string.Equals(System.IO.Path.GetFileName(ie.FullName),
"", StringComparison.CurrentCultureIgnoreCase))
{
if (ie.LocationURL == url)
{
return ie;
}
}
}
return null;
}
好了,其他的⽅法如
doc.body
等等,⾃⼰套⽤⼀下就可以了
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论