C# 实现模拟网页操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 实现模拟网页操作相关的知识,希望对你有一定的参考价值。

我做的是winform程序,要在后台自动输入网站的用户名和密码,并登陆到主页面,然后抓取主页面部分的源代码,这些部分我已经完成,现在遇到个问题,在网页源文件中,有些是通过ajax请求输出的文字,在源文件中获取不到。如图

报价是通过ajax处理的。下图是他的ajax部分

,我通过webBrowser怎么去执行他的这个ajax,使得源代码中,有报价的内容呢?

参考技术A 首先尝试直接在Chrome浏览器打开下面的链接,前面的域名自己补完,后面的“57976156”是一个随机数字。
/maintain/interface/forindex/ashx?dealerid=100015266&type=4&number=57976156
如果能打开并获取到json文本数据的话,你就可以通过代码用HttpRequest的Get方法去获得这段数据。
得到数据后分析下数据,然后你想干嘛就干嘛吧
参考技术B 以前试过 好像没办法。ajax应该是等页面载入以后再执行。你可以循环解析源代码查看是否已经取得ajax部分的代码追问

这个应该不行的吧,我直接通过浏览器打开后,鼠标右击查看源文件,都是空的,现在就是取不到那个值,愁死了

追答

你通过浏览器打开那个页面(不是程序的webbrowers) 网页源代码里也是空的?

追问

webBrowser1控件获取的源代码也是空的。现在问题这样,我后台自动点击webBrowser1页面中的一个超链接,在webBrowser1控件中已经看到跳转成功,进入b页面,然后我抓取的源码怎么还是上一个链接中的呢?求解。是不是事件不对

追答

    你放一个按钮 试试 等页面完全加载完毕后再获取一下源代码试试 有没有ajax加载的部分

在webBrowser1_DocumentCompleted事件中加下面的代码
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、验证码还没进行到这一步,只求先解决能输入帐号密码的功能就行

    参考技术A 我没用过你这种方法,我们一般用cookie并进行加密处理,登录时添加验证若存在的取出添加到标签上 参考技术B 这个应该是受JS div 标签影响 ,就好比 有时候我们去一个母界面去取 子界面一样应该是取不到追问

    那有什么其他方法吗?还请指教了!

    追答

    指教谈不上。尝试一下获得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控件获取网页中的账号密码登录网页元素并自动填写模拟自动登录?

    爬虫-使用模拟浏览器操作(截取网页)

    C#获取网页中某个元素的位置,并模拟点击

    在电脑上运行安卓模拟器,如何实现网页内GPS定位?

    .NET(C#) SendKeys模拟键盘按键不生效使用WinAPI的替代方案

    C# 模拟登录网站的cookie问题