用程序来控制一个网页,实现自动输入等操作

标签: 程序 控制 网页 | 发表时间:2014-05-07 18:55 | 作者:lufy_Legend
出处:http://blog.csdn.net
首先今天要说的东西跟游戏无关,你是不是有时候会遇到,在某个网页上重复着几十次的简单而又无聊的录入或点击等工作?比如你的程序需要测试,需要注册大量的测试邮箱。比如你的老板是个变态,让你去各个论坛发大量的垃圾贴子(最无耻行为,纯属举例)。或者,你需要定时的到某一个网页上执行某一些行为,比如上班下班的出勤打卡系统,等等吧,
如果有,那么我今天所介绍的或许会对你有帮助。
当然,如果你要操作的这些网页都是自己开发的,那么无所谓了,你在多开发个工具就行了,但是我说的上面这些都是第三方的网页,你控制不了它们,如果遇到上上述情况,而你是一个挨踢程序员,而你又选择老老实实的重复着这些无聊又费时的工作,那你就真该挨踢了。
要实现这些功能,你只需要用程序控制这些网页,让网页听你的就行了。要动手实现这一系列的功能,你需要做几个简单的准备。
1,OS环境:Windows
2,IE浏览器
3,工具:Excel或者Visual Studio
先来看看如何用Excel来控制一个网页。
新建一个Excel并且进入VBA,标准模式,什么?不知道VBA?你可以找我的两个老师问一下,他们一个姓百,另一个姓谷,诶?你说你也认识?那大家都是自己人了,你什么时候请吃饭啊?
如下图。

我是日文系统,中文的你对照着自己来吧...
要对IE进行操作,首先需要引入两个插件
HTML Object Library
Microsoft Internet Controls
如图

打开IE,你只需要下面几行代码
Sub Main()
    Dim ie As Object
    Set ie = CreateObject("InternetExplorer.Application")
    ie.Visible = True
End Sub

比如我要打开百度,那就这样
ie.Navigate "http://www.baidu.com"

接着你需要等待页面加载
While ie.ReadyState <> 4 Or ie.Busy = True
	DoEvents
Wend

好了,百度打开了,是不是很简单,不过你也会说,打开个网页算什么,随便一个程序都可以吧,好吧,咱们下面来实现自动搜索。
首先,咱们用VBA在百度的输入框里输入几个文字,百度的输入框的代码如下
<input type="text" name="wd" id="kw1" maxlength="100" style="width:474px;" autocomplete="off">

那我们就可以通过这个id来对输入框进行输入,如下
ie.Document.getElementById("kw1").value = "hellow world"

如果你上面都没有出错的话,"hellow world"应该已经被加入到输入框里了。
那么下面用VBA来点击搜索按钮,进行搜索。百度的搜索按钮代码如下
<input type="submit" value="百度一下" id="su1" class="btn" onmousedown="this.className='btn btn_h'" onmouseout="this.className='btn'">

看到id了吧,那就简单了,下面这样来点击它
ie.Document.getElementById("su1").click

怎么样,自动搜索完成了吧
当然,这只是一个最简单的例子而已,如果没有id怎么办?你也可以下下面这样用它
ie.document.all
ie.document.body
ie.document.getElementsByName
ie.document.getElementsByTagName

看到了吧,和JS很像,如果你不愿意查相关的API的话,那你就拿JS的操作方法往上面套用吧
下面来看另一个页面的结构,比如下面这样
<html>
<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 = "http://www.baidu.com" Then '看看是不是你要的页面
			'找到你要操作的页面了,开始处理
		End If
	End If
Next
Set objShell = Nothing

excel就说这么多了。


下面用.net来做,既然前面用了VBA,这里我就不用VB再重复了,换用C#来实现。
打开Visual Studio,新建一个项目,同样,这次你需要引入三个插件
HTML Object Library
Microsoft Internet Controls
Microsoft Shell Controls And Automation
如图


启动IE,并打开百度
SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer();
ie.Navigate("http://www.baidu.com");
ie.Visible = true;

获取Document
shtml.HTMLDocument doc = ie.Document;

同样,在输入框里输入文字
doc.getElementById("kw1").value = "hellow world";

开始搜索。
doc.getElementById("su1").click();

下面利用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),
				"iexplore.exe", StringComparison.CurrentCultureIgnoreCase))
		{
			if (ie.LocationURL == url)
			{
				 return ie;
			}
		}
	}
	return null;
}

好了,其他的方法如
doc.body
doc.getElementsByName
doc.getElementsByTagName

等等,自己套用一下就可以了
接下来是frame操作,如下
mshtml.HTMLDocument doc2 = ie.Document;
var frame = doc2.frames.item(int.Parse(configs[2]));
var doc = frame.Document;
doc.getElementById
完了,操作方法基本上都大同小异吧。
在使用.net来操作浏览器的时候,我发现操作同一个页面时,如果页面发生刷新或者跳转等动作后,程序经常会出bug,网上搜索了一下,发现还真不是我一个人,那如何来避免呢?
因为使用.net来第一次操作页面的时候是肯定不会出错的,必须是2次或2次以上才会出现错误,所以我们可以做两个程序,在一个程序中调用另一个,调用完之后,就把它关闭掉,这样每次都相当于启动一个新程序,就不会出bug了。
启动一个新程序用下面代码
public static void runSubWindow(String command)
{
	ProcessStartInfo psInfo = new ProcessStartInfo();
	psInfo.FileName = command; 
	psInfo.CreateNoWindow = true;
	psInfo.UseShellExecute = false;
	psInfo.RedirectStandardOutput = true;
	Process p = Process.Start(psInfo);
	string output = p.StandardOutput.ReadToEnd();
}

传入你的程序的路径,就可以打开它了。

有了上面的知识,你可以自由的发挥了,比如你做一个定时程序,在上班时间自动打卡,然后自己接着睡一会儿....嘘!!这绝对不是我说的。

今天就介绍这么多了,欢迎继续关注我的博客

转载请注明: 转自lufy_legend的博客http://blog.csdn.net/lufy_legend
作者:lufy_Legend 发表于2014-5-7 10:55:33 原文链接
阅读:0 评论:0 查看评论

相关 [程序 控制 网页] 推荐:

用程序来控制一个网页,实现自动输入等操作

- - CSDN博客推荐文章
首先今天要说的东西跟游戏无关,你是不是有时候会遇到,在某个网页上重复着几十次的简单而又无聊的录入或点击等工作. 比如你的程序需要测试,需要注册大量的测试邮箱. 比如你的老板是个变态,让你去各个论坛发大量的垃圾贴子(最无耻行为,纯属举例). 或者,你需要定时的到某一个网页上执行某一些行为,比如上班下班的出勤打卡系统,等等吧,.

Chrome浏览器发布远程控制电脑扩展程序

- -_- - YesKafei Daily
浏览器在互联网中扮演的角色越来越重. Google很早就看到了浏览器的重要性,Google Chrome就好像一部单反,具备卡片欠缺的更多操控性和扩展性. 10月7日,Google推出Chrome扩展程序:Chrome Remote Desktop,实现了通过浏览器就可以远程控制计算机的功能. 目前软件属于测试阶段,支持Windows, Linux, Mac和Chromebooks系统.

Guacamole通过浏览器以网页远程控制电脑

- - IE浏览器中文网站
Guacamole 是一个以 HTML5 为基础的网页应用程序(web application),使用者可以在浏览器中通过这个网页应用程序并配合远程桌面的传输协议(例如 VNC 或 RDP)来操控远程的电脑. 除了网页应用程序之外,Guacamole 也是一个专案名称,这个专案的内容就是发展一套 API 提供给 Guacamole 网页应用程序使用,而这个 API 亦可用于其他类似的应用程序或服务.

中国Android恶意程序把博客作为指令控制服务器

- Woooon - Solidot
趋势科技发现了在中国Android第三方应用商店传播的新恶意程序,利用了一种新的技巧接收指令. 该恶意程序伪装成电子书阅读器“万阅公寓”,通过Android第三方应用商店下载传播. 在安装前,它会要求用户许可访问网络、个人信息、电话和系统工具等. 如果这些许可获得批准,它将能控制手机,包括唤醒手机、阅读日志文件,联系人信息,接收和发送SMS.

手机终端网页调试程序使用说明

- - Web前端 - ITeye博客
(按照本文最后总结部分所述进行操作可以快速抓住要领,学会使用). 一、调试核心程序weinre简介. Weinre是一种远程调试工具,即可以在电脑上调试手机上的页面. 调试界面和webkit内核浏览器(chrome、safari等)调试界面很相似,熟悉webkit内核浏览器的开发人员很容易上手使用.

初探 performance – 监控网页与程序性能

- - Web前端 腾讯AlloyTeam Blog | 愿景: 成为地球卓越的Web团队!
使用 window.performance 提供了一组精确的数据,经过简单的计算就能得出一些网页性能数据. 配合上报一些客户端浏览器的设备类型等数据,就可以实现简单的统计啦. 额,先看下兼容性如何: http://caniuse.com/#feat=nav-timing. 这篇文章中 Demo 的运行环境为最新的 Chrome 的控制台,如果你用的是其他浏览器,自查兼容性哈~.

网页设计师的必备选择20 +必需的Windows应用程序

- Pei - 博客园-首页原创精华区
今天给网页设计师推荐20几个windows下提高工作效率的应用程序,对于设计师来说是必不可少的,希望大家喜欢. 虽然我更喜欢使用Firebug时,我发现“开箱即用”的CSS编辑器要真正有用的. Skybound Stylizer已经出了一段时间,但最新版本,4.0,现在是出了很多令人难以置信的功能,以帮助您在开发过程中.

经典网页设计:精心设计的 iPhone 和 Android 应用程序网站

- - 博客园_梦想天空
  这篇文章和大家分享一组精心设计的 iPhone 和 Android 应用程序网站. 在一个应用程序的网站,从醒目的图像到有趣的标题和产品信息等等,你可以找到很多的灵感. 今天的文章中收集的这些设计精美的应用程序网站为我们的网站设计和制作提供了各种各样的思路,都是真正优秀和杰出的设计,值得借鉴和学习.

没有人能阻止程序员将电脑上的一切搬到网页上

- Guan - 博客园-首页原创精华区
操作系统模拟(OS Simulator). Q版的界面,看起来大体上是模拟Mac OS而不是Windows,不过那些桌面Widget又是Windows的展品. 使用他的唯一理由可能就是在没有QQ的电脑上用QQ吧. Windows 95(感谢大家留言指正). 虽然界面简洁了一些,但是基本的功能都用了:上网,文件夹.

Nginx带宽控制

- - 火丁笔记
有个老项目,通过 Squid 提供文件下载功能,利用  delay_parameters 实现带宽控制,问题是我玩不转 Squid,于是盘算着是不是能在 Nginx 里找到类似的功能. 好消息是 Nginx 提供了  limit_rate 和  limit_rate_after,举个例子来说明一下:.