Delphi WebBrowser完成网页自动登录

news/2024/4/29 7:08:22/文章来源:https://www.cnblogs.com/tang-delphi/p/16707649.html

订制一些WEB数据抓取项目时,会遇到需要先登录网站系统,这时候我们通常会做成由系统自动登录的方式。

分析网页

要完成这项功能,首先需要对项目的网页进行分析,找到关键数据项的ID。如下图中的。

1、用户名的ID名称;
2、密码对应的ID名称;
3、登录按钮对应的ID名称。

完成自动登录

我们在Delphi中使用WebBrowser控件来显示处理网页,控件怎么使用暂不在本文中讲述。
直接上内容:

本次项目是在DocumentComplete事件中去处理自动登录的,你也可以自己建一个按钮,通过按钮去登录。
当页面加载完成后,会触发DocumentComplete事件,我们首先使用string(URL).StartsWith 判断是否是登录页面,StartsWith只判断字符串前面部分是否相同,因为有时候URL后面可能会有不同的参数,所以只需要判断前面重要部分就可以。
其次用了CheckBox1.Checked来选择是否需要自动登录,如果需要,则执行自动登录代码
在代码中先创建了一个匿名线程,执行线程内部工作时,DocumentComplete事件代码已执行完成,在线程中,我们先等待400毫秒,用于让浏览器处理完网页页面的其他初始工作。
之后是使用线程同步方式在WebBrowser控件内执行一段JS代码,用JS代码来完成登录工作。
JS代码主要有三条,填写用户名、填写密码、触发登录按钮的点击事件。

主要代码内容

procedure TForm5.WebBrowser1DocumentComplete(ASender: TObject;const pDisp: IDispatch; const URL: OleVariant);
const//用于自动登录JScriptLog = '$(''#username'').val(''%S'');' + #13#10 +  //用于填写用户名'$(''#password'').val(''%S'');' + #13#10 +  //用于填写密码'$(''#login'').click();';  //触发登录
varBDoc: IHTMLDocument2;BDoc3: IHTMLDocument3;vEFormTime,vEtoTime: IHTMLElement;
beginif WebBrowser1.Application = pDisp thenbeginBDoc := WebBrowser1.Document as IHTMLDocument2;if string(URL).StartsWith('http://XXXX/index.html')then //检查URL是否是监控系统的登录页面beginif CheckBox1.Checked thenbeginTThread.CreateAnonymousThread(procedurebeginsleep(400);TThread.Synchronize(nil,procedurebeginBDoc := WebBrowser1.Document as IHTMLDocument2;//如果是监控系统的登录页面 完成自动登录BDoc.parentWindow.execScript(Format(JScriptLog,[Edit1.Text, Edit4.Text]), 'JavaScript');end);end).Start;end;endelse if string(URL).StartsWith('http://XXXXXX/pages/MainInfo.html') thenbegin//处理其他页面的工作时使用end;end;
end;

其他说明

使用WebBrowser处完成一些指定网页数据提取(或填写)的功能,需要对WebBrowser控件本身的使用比较了解,更重要的是需要针对等处理的网页进行分析,所以必须熟悉HTML、JS(jquery,现在的网站基本会使用到,当然还有一些其他UI框架),还需要了解如何进行网页本地调试与跟踪,某些工作需要在调试中去找内容的。
很多工作会是一些分析与尝试,最后Delphi的实现代码其实会很少的。

转自:https://www.51sjk.com/b194b258947/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_10117.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot毕设项目公职备考在线学习平台e1h19(java+VUE+Mybatis+Maven+Mysql)

项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis Maven Vue 等等组成,B/…

递归回溯实战+思想

目录 排列(提供元素无重复,并且不可以重复选择) 排列(提供的元素重复了,但是同个位置的元素不能复选) 组合(提供的元素没有重复,并且可以重复选择相同位置元素) 子集…

进程关系~

进程关系一、进程组二、会话三、控制终端四、函数tcgetpgrp、tcsetpgrp和tcgetsid五、作业控制五、孤儿进程组一、进程组 每个进程除了有一进程ID之外,还属于一个进程组,进程组是一个或多个进程的集合。同一进程组中的各进程接收来自同一终端的各 种信号…

Eclipse2022创建SSM项目及问题解决

Eclipse2022创建SSM项目及问题解决 使用Eclipse创建SSM项目的过程中会遇到一些问题,相对于IDEA而言更为繁琐,该篇文章是在使用Eclipse2022,并且设备上已经安装、配置好了Tomcat和Maven的基础之上进行的,目的是为了记录在Eclipse上…

Windows部署JMeter的压力测试

1.安装Windows版本Java 直接下载Java exe格式程序包 官网下载 点击 2.下载JMeter的压缩包 官网下载地址请 点击 或者复制这个URL: https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.5.tgz 在浏览器上,会自动下载 下载下来解压即可。 3.启动JMeter 进入…

Linux内核设计与实现 第十二章 内存管理

因为内核内存需要节省着用,内核处理内存分配错误比较麻烦等,所以内核中获取内存不用户空间获取内存复杂得多。 本章讨论内核是如何管理内存和内核之中获取内存的办法。 12.1页 a) 可以通过 getconf 命令来查看系统的page的大小: [wangyubi…

Linux开发_CentOS7.4服务器安装NFS、NGINX服务器,ffmpeg、Qt环境

1. 环境介绍 环境介绍:采用的是华为云的ECS弹性云服务器–镜像安装的CentOS7.4 64位 -----是服务器版,非桌面版哦。 在CentOS7.4服务器版本的环境下搭建NFS服务器、安装ffmpeg、安装nginx服务器、部署Qt编译环境。 (1)配置NGIN…

河北稳控科技几种振弦采集仪的主要区别是什么?

河北稳控科技几种振弦采集仪的主要区别是什么?VH系列属于手持系列,多用于振弦传感器现场单次测量使用;VH501TC采集读数仪,设备是专用的多类型传感器手持式读数仪,主测传感类型为单弦式振弦传感器,辅测传感类型为电压、电流传感。采用 32 位 ARM 处理器和大尺寸全彩屏、阵…

无人机群编队分析的定位问题 分析与思考-1(数学建模竞赛2022年B题)

2022年高教社杯全国大学生数学建模竞赛结束了,在此我们对 2022年 B题 进行一些分析与思考。 1. 初步印象 2022年 B题 (无人机遂行编队飞行中的纯方位无源定位)是一个有趣的题目。 随着无人机技术的快速发展,早已从高科技变做寻常…

【Java】运算符

我不去想是否能够成功 既然选择了远方 便只顾风雨兼程 —— 汪国真 目录 1. 认识运算符 1.1 认识运算符 1.2 运算符的分类 2. 算术运算符 2.1 四则运算符 2.2 复合赋值运算符 2.3 自增 / 自减 运算符 3.关系运算符 4.逻辑运算符 4.1 逻辑与 && 4.2 逻…

分库分表实践

分库分表实践 分库分表概念以及使用场景 分库分表用来解决单表数据量太大,引起的性能问题。使用分库分表后能够根据特定路由键值将数据分布在不同库以及不同表中,解决了单表数据量的性能、运维等问题。一般来讲,单一数据库实例的数据的阈值…

【网络】HTTP协议详解

😀大家好,我是白晨,一个不是很能熬夜😫,但是也想日更的人✈。如果喜欢这篇文章,点个赞👍,关注一下👀白晨吧!你的支持就是我最大的动力!&#x1f4…

svn 代码迁入gitlab

window中安装好git客户端,右键空白处,点选git bash here进入git界面,输入命令 将svn38163之后的所有记录都备份那:git svn clone -r 38163:HEAD svn地址 --no-metadata trunk(本地电脑目录名) --username *** 备份所有提交记录:git svn clone svn地址 --no-metadata …

Linux安装Python 以及过程中的命令详细介绍

下载源码包 打开 Python 官网 找到需要的安装包 获取了资源的链接后,进入Linux下载,wget意思是webget, 即下载 wget https://www.python.org/ftp/python/3.10.7/Python-3.10.7.tgz目录下会新增 这样源码包就下载好了。 如果下载太慢&…

二叉树与递归问题

目录 一:求二叉树的深度 二:二叉树反转 三:二叉树镜像判断 四:递归的终止条件 用递归解决的问题必须注意的: 递归的终止条件,也就是递归的出口(否则:栈溢出)递归的过…

决策树简介

决策树简介 决策树实际上是一个布尔函数,它的输出可以是“0 或 1”或“-1 或 +1”或“-1、0 或 +1”。决策树的大小等于其中存在的节点数,其深度等于从顶部到根的最长路径的长度。 错误率:训练集始终是给模型的标记示例,模型训练得越多,其错误率就越低。 训练样本 = { set…

程序里对象很深很大,可以用这个设计模式缓解一下

如果一个类的有非常多的属性,层级还很深。这个妥妥的是我的对象很大,你创建的时候忍一下......那你每次要创建的时候都忍一下?有没有一种好的方式让我们创建太的时候使用体验更好一点呢? 今天的文章里就给大家介绍一种设计模式,来…

C++多线程的线程返回值问题

对于多线程可执行对象的返回值是何时返回,以及得到的呢? 对于需要用到线程返回值的线程要使用future类对象来实现 文章目录future对象async()launch::deferred参数launch::async参数packaged_taskpromisefuture对象 是一个类模板 提供访问异步对象的操作…

优化 | Management Science 7-8月文章精选: 信息系统中的运筹学

作者:Evelyn Yao 清华大学本科在读 在“Management Science近期论文精选”中,我们有主题、有针对性地选择了Management Science中一些有趣的文章,不仅对文章的内容进行了概括与点评,而且也对文章的结构进行了梳理,旨在…

非零基础自学Java (老师:韩顺平) 第13章 常用类 13.5 StringBuffer类

非零基础自学Java (老师:韩顺平) ✈【【零基础 快速学Java】韩顺平 零基础30天学会Java】 第13章 常用类 文章目录非零基础自学Java (老师:韩顺平)第13章 常用类13.5 StringBuffer类13.5.1 基本介绍13.5.2 String VS StringBuffer13.5.3 String 和 Str…