这两天写一个自动获取好友列表并访问好友空间留言的程序,到最后提交留言那里卡住了,求各位大大们帮忙! 我的方法思路如下:
1、获取按钮的HtmlElement对象,热闹后直接调用e2.InvokeMember("Click"),此法不管用.
2、还是上面的原理,用js的方法来执行,还没试!
3、模拟按键的方法,留言的时候可以按Ctrl+Enter快捷键可以留言,我用Sendkeys.Send(^Enter)的方法也没反应,也许可能是焦点的问题,我比较迷惑!
4、最后的办法,是我最不想用的,就是获取按钮坐标,然后移动鼠标到按钮上面,再模拟鼠标单击,这种办法需要控制用户鼠标,我不喜欢。尽管如此,我还是不知道如果获取网页中按钮的坐标,以及移动光标并模拟单击。
以上就是菜鸟我的想法,请大大们过目,分析分析,并指出一种可行的方法。
附上按钮html
<button type="button" class="gb_bt" id="btnPostMsg">发表</button>
1、获取按钮的HtmlElement对象,热闹后直接调用e2.InvokeMember("Click"),此法不管用.
2、还是上面的原理,用js的方法来执行,还没试!
3、模拟按键的方法,留言的时候可以按Ctrl+Enter快捷键可以留言,我用Sendkeys.Send(^Enter)的方法也没反应,也许可能是焦点的问题,我比较迷惑!
4、最后的办法,是我最不想用的,就是获取按钮坐标,然后移动鼠标到按钮上面,再模拟鼠标单击,这种办法需要控制用户鼠标,我不喜欢。尽管如此,我还是不知道如果获取网页中按钮的坐标,以及移动光标并模拟单击。
以上就是菜鸟我的想法,请大大们过目,分析分析,并指出一种可行的方法。
附上按钮html
<button type="button" class="gb_bt" id="btnPostMsg">发表</button>
private void Form1_Load(object sender, EventArgs e)
{
this.webBrowser1.Url = new Uri("http://www.baidu.com");
}
private void button1_Click(object sender, EventArgs e)
{
HtmlElement searchWords = webBrowser1.Document.All["kw"];
HtmlElement searchButton = webBrowser1.Document.All["su"];
searchWords.SetAttribute("value", "guwei4037");
searchButton.InvokeMember("click");
}
{
this.webBrowser1.Url = new Uri("http://user.qzone.qq.com/345822155/infocenter#!app=334&url=http%3A%2F%2Fctc.qzs.qq.com%2Fqzone%2Fmsgboard%2Fmsgbcanvas.html%23page%3D1");
} private void button1_Click(object sender, EventArgs e)
{
HtmlElement searchButton = webBrowser1.Document.Window.Frames["tgb"].Document.All["btnPostMsg"];
searchButton.InvokeMember("click");
}
{
this.webBrowser1.Url = new Uri("http://user.qzone.qq.com/345822155/infocenter#!app=334&url=http%3A%2F%2Fctc.qzs.qq.com%2Fqzone%2Fmsgboard%2Fmsgbcanvas.html%23page%3D1");
} private void button1_Click(object sender, EventArgs e)
{
HtmlElement searchButton = webBrowser1.Document.Window.Frames["tgb"].Document.All["btnPostMsg"];
searchButton.InvokeMember("click");
}
嗯 确实可以 是我太笨了,你这可以是因为当你点击按钮时整个内容都加载好了,虽然我也用了DocumentCompleted事件来判断但还是会出现 还没有填写内容的 提示,但是我文本区域前面已经赋值,揣摩了还就才发现要进行提交,是要等到那个编辑工具全部加载完成才可以,于是加了个timer循环判断,当满足条件时再提交数据。总之,程序基本完成够用了,非常感谢你!
{
this.webBrowser1.Url = new Uri("http://user.qzone.qq.com/345822155/infocenter#!app=334&url=http%3A%2F%2Fctc.qzs.qq.com%2Fqzone%2Fmsgboard%2Fmsgbcanvas.html%23page%3D1");
} private void button1_Click(object sender, EventArgs e)
{
HtmlElement searchButton = webBrowser1.Document.Window.Frames["tgb"].Document.All["btnPostMsg"];
searchButton.InvokeMember("click");
}
嗯 确实可以 是我太笨了,你这可以是因为当你点击按钮时整个内容都加载好了,虽然我也用了DocumentCompleted事件来判断但还是会出现 还没有填写内容的 提示,但是我文本区域前面已经赋值,揣摩了还就才发现要进行提交,是要等到那个编辑工具全部加载完成才可以,于是加了个timer循环判断,当满足条件时再提交数据。总之,程序基本完成够用了,非常感谢你!
再弱弱地问一下,向这种有Id的框架可以直接根据id名获取,如果没有,像只有个class有什么好的办法?除了循环遍历!
今天整理优化了下代码,遇到个异常,你遇到木?"InvalidArgument=“tgb”的值对于“windowId”无效。"
在这一行代码:
HtmlElement el = webBrowser1.Document.Window.Frames["tgb"].Document.GetElementById(name);