C# 实现模拟网页操作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 实现模拟网页操作相关的知识,希望对你有一定的参考价值。
我做的是winform程序,要在后台自动输入网站的用户名和密码,并登陆到主页面,然后抓取主页面部分的源代码,这些部分我已经完成,现在遇到个问题,在网页源文件中,有些是通过ajax请求输出的文字,在源文件中获取不到。如图
报价是通过ajax处理的。下图是他的ajax部分
,我通过webBrowser怎么去执行他的这个ajax,使得源代码中,有报价的内容呢?
/maintain/interface/forindex/ashx?dealerid=100015266&type=4&number=57976156
如果能打开并获取到json文本数据的话,你就可以通过代码用HttpRequest的Get方法去获得这段数据。
得到数据后分析下数据,然后你想干嘛就干嘛吧 参考技术B 以前试过 好像没办法。ajax应该是等页面载入以后再执行。你可以循环解析源代码查看是否已经取得ajax部分的代码追问
这个应该不行的吧,我直接通过浏览器打开后,鼠标右击查看源文件,都是空的,现在就是取不到那个值,愁死了
追答你通过浏览器打开那个页面(不是程序的webbrowers) 网页源代码里也是空的?
追问webBrowser1控件获取的源代码也是空的。现在问题这样,我后台自动点击webBrowser1页面中的一个超链接,在webBrowser1控件中已经看到跳转成功,进入b页面,然后我抓取的源码怎么还是上一个链接中的呢?求解。是不是事件不对
追答你放一个按钮 试试 等页面完全加载完毕后再获取一下源代码试试 有没有ajax加载的部分
if (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
return;
string wbUrl = wb.Url.ToString();
System.Windows.Forms.HtmlDocument document = this.webBrowser1.Document;
if (e.Url.ToString() != wb.Url.ToString())
return;//不断拒绝,只有URL是webbrowser1的navigate地址才接受
C# 使用webBrowser控件获取网页中的账号密码登录网页元素并自动填写模拟自动登录?
想实现qq音乐网页版自动登录功能,但是不知道怎么用webBrowser控件获取对应的网页元素。之前别的网页可以用下面的方式获取成功,但是这个qq音乐网页不行了,请大神指教!
以前是这样做的,如图1:
HtmlElement user = webBrowser1.Document.All["username"];//获取账号文本框,ID=username
HtmlElement password = webBrowser1.Document.All["password"];//获取密码文本框,ID=password
HtmlElement LoginButton = webBrowser1.Document.All["sso_login"];//获取登录按钮,ID=sso_login
user.SetAttribute("value","abc");//给账号文本框内容设置为“abc”password.SetAttribute("value",“*123” );//给密码文本框内容设置为“*123”
LoginButton.InvokeMember("click");//调用按钮的点击事件
现在qq音乐网页同样方法不行了,如图2
QQ音乐登录的方式好像是API的方式,给你两个方案
1、API方式:然后输入对应的参数,你就可以登录成功,这时你就可以做自己的想做的事了
2、模拟点击(selenium)方式:即使利用seleium模拟鼠标点击网页,实现登录,这个方式属于笨拙的方式
注意:有时候可能出现需要输入验证码,这时你就需要识别验证码,给你推荐 tesseract-ocr 这个插件,源码地址tesseract-orc 不明白的留言吧
追问1、API方式指的是啥呀?可以具体点不?
2、selenium方式,是不是运行软件的时候,自己的鼠标就不能乱动了?
3、验证码还没进行到这一步,只求先解决能输入帐号密码的功能就行
那有什么其他方法吗?还请指教了!
追答指教谈不上。尝试一下获得class属性值的看看有没有什么收获
追问之前也用过遍历className=inputstyle来找,但是也不行,结果值没有等于这项的
追答不好意思 刚刚看见 如果实在不能 控制 能不能尝试脚本控制
参考技术C 我觉得是因为qq的是个弹框,你代码执行的时候,弹框还没出现,所以要循环等待?追问你好,我是把弹框点开后,所有界面出现了,我再去用代码找那些元素的,但是不行。这种弹窗是有什么别的特殊方法吗?求指教!
追答你把现有代码发来看看(最好是放github)
追问我就是在winform窗体中,用webBrowser控件打开y.qq.com,然后把登录界面手动点开,再在一个按钮里面加下面代码。只不过支行完,都是没有值,元素都是Null
HtmlElement user = webBrowser1.Document.All["u"];
HtmlElement password = webBrowser1.Document.All["p"];
HtmlElement LoginButton = webBrowser1.Document.All["login_button"];
LoginButton.InvokeMember("click");
共享代码调试
以上是关于C# 实现模拟网页操作的主要内容,如果未能解决你的问题,请参考以下文章
C# 使用webBrowser控件获取网页中的账号密码登录网页元素并自动填写模拟自动登录?