Powershell脚本自动化登录网站的简单实例,命令行方式实现Http(s)的GET、POST请求

自动化登录网站的流程比较简单,如果不懂 Python、JavaScript、C++ 等编程语言,又没有安装这些编程语言环境软件,我们还要新的点子:用Windows系统自带的 Powershell 运行自编的脚本来实现。

PowerShell 是一种功能强大的自动化工具,除了可以使用 DOS 批处理命令之外,还可以进行计算,网络爬虫,抓取网页数据等骚操作。 在本文中,我们将探讨如何使用 PowerShell 登录一个论坛。

Powershell的好处:

1、Windows自带,不需要安装编程语言环境,用任何一款文本编辑器(如“记事本”)都可以编辑脚本。

2、自带函数,网络编程不需要另外安装库文件或头文件。

3、与DOS的.bat批处理一样是解释型编程,不需要编译成.exe,可以逐行输入一步步运行代码。

第一步:初始化登录页面的 URL 和将用于发出请求的会话对象(Session)。

$login_url = 'http://登录网址'
$username = '登录账号'
$password = '登录密码'
# 创建一个Session,会自动记录Cookies便于后续的网络访问
$session = New-Object Microsoft.PowerShell.Commands.WebRequestSession

第二步:Invoke-WebRequest 命令发出 GET 请求打开登录的网页,可以使用 -SessionVariable 参数来保存会话对象以备后用。

网页源代码保存在$response1.Content变量中,然后从该变量里通过正则表达式提取登录所需的表单数据,比如某论坛的登录页面源代码里的一个 hash 值。

$response1 = Invoke-WebRequest -Uri $login_url -SessionVariable session

# 发出GET请求后获得的网页源代码保存在$response1.Content变量中
# 正则表达式提取网页源代码 name="hash" value="…………" 中“…………”的内容

if ($response1.Content -match 'name="hash" value="(.*?)"') {
    $hash = $Matches[1]
}

$Matches 变量是一个特殊的 PowerShell 变量,它保存正则表达式抓取的结果。

第三步:准备将在登录表单提交中发送的数据。 创建一个包含必填字段的 data 表,包括上面提取到的 hash 值、用户名和密码。

然后再用Invoke-WebRequest 命令传入数据( -Body $data)和会话对象。必须使用 -WebSession $session 参数以保持会话连接(延续使用上面网络访问后产生的 cookies)。

$data = @{
    hash = $hash
    username = $username
    password = $password
}

# "POST"发送表单数据来登录网站
$response2 = Invoke-WebRequest -Uri $login_url -Method POST -Body $data  -WebSession $session

第四步:发出 POST 请求后,服务器返回的信息形式可能如下:

{"status":1,"msg":"\u767b\u5f55\u6210\u529f","redirect":{"timeout":2,"subject":"\u9996\u9875","href":"\/"}}

很明显这是一个 JSON 对象,其中的“msg”就是我们需要了解的登录结果文本,由于文本被编码成Unicode,要转换为人能看懂的文字,就需要使用 ConvertFrom-Json cmdlet 解析该对象再来输出正确的文本消息。

# 将服务器返回的网页源代码文本转换为JSOn格式
$json1 = $response2.Content
$obj = $json1 | ConvertFrom-Json

# 从JSON中提取 "msg" 的文本并输出
$msg1 = $obj.msg
Write-Output $msg1

由于 PowerShell 是解释型运行代码,因此上述的代码可以在 PowerShell 提示符里直接粘贴运行。也可以像 DOS 的 .bat 批处理文件那样先把以上的代码保存成 Powershell 的脚本格式,扩展名是 .ps1,文件名任意,比如:my login test.ps1,保存在 D:\Documents。然后在开始菜单选择打开 Powershell,运行步骤如下:

cd "d:\documents"
.\"my login test.ps1"

文件名、目录名加双引号为了防止有空格而出错,运行脚本的命令是文件名前面必须要有 .\ 

 

注意:如果你是第一次运行 .ps1 脚本文件,很可能 PowerShell 会提示以下的错误信息:

无法加载文件 D:\documents\my login test.ps1,因为在此系统上禁止运行脚本。
有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 
中的 about_Execution_Policies。
所在位置 行:1 字符: 3
+   .\"my login test.ps1"
+   ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [],PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

原因是首次启动 PowerShell 时,现用执行策略很可能是 Restricted(不允许任何脚本运行)。需要开启运行脚本,在 PowerShell 里输入命令:

set-ExecutionPolicy RemoteSigned

 然后按提示输入 A (永久生效)或 Y (临时生效)即可继续运行脚本。

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

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

相关文章

大型软件外包项目的开发流程

与中小型软件项目相比,大型软件项目的管理和开发难度更大,需要在开发过程中严格执行软件的项目管理流程,不能有比较明显的问题,有问题也要及时解决。软件项目的开发过程环环相扣,如果在前流程中有明显问题,…

【fluent UDF】保留UDM变量Reserving UDM Variables Using Reserve_User_Memory_Vars-测试分析篇

一、问题背景 因为对Reserve_User_Memory_Vars这个函数比较陌生,在学习官方文档过程中发现难以理解,于是只好亲手在fluent 2022上测试一番。 直接上结论: 此保留函数运行一次后(设置GUI界面中的UDM数目第一次加载共享库成功&…

【从零开始学习 UVM】3.8、UVM TestBench架构 —— UVM Agent [uvm_agent]

文章目录 什么是 UVM Agent?所有的Agent Type是什么?如何确定UVM Agent是主动还是被动的?创建UVM代理的步骤一个UVM代理做什么?如何将UVM代理配置为主动或被动?一个UVM Agent例子推荐做法什么是 UVM Agent? 一个 Agent 将Sequencer、Driver和Monitor封装成一个单一实体,…

图像分类的划分数据,dataset和dataloader的实现

目录 1. 介绍 2. 主函数代码 2. utils 模块代码 2.1 划分数据集 2.2 可视化数据集 3. dataset 数据处理 4. collate_fn 5. other 1. 介绍 图像分类一般来说不需要自定义的dataSet,因为pytorch自定义好的ImageFolder可以解决大部分的需求,更多的…

springBoot --- mybatisPlus自动生成代码

mybatisPlus自动生成代码mybatisPlus自动生成代码pom.xmlapplication.yml自动生成代码测试主启动类生成目录结果使用插件 --- 版本要求:3.4.0 版本以上pom.xml更新mybatisplus插件版本mp报错‘AutoGenerator()‘ has private access in ‘com.baomidou.mybatisplus.…

Linux系统中使任务后台挂起不停止的命令

在使用远程SSH连接工具时,退出工具时任务也停止,相当于远程连接工具在系统开启了一个Terminal终端,服务也会随着终端的中断而停止。Linux系统也提供了服务基于后台运行的命令,是独立于终端的进程。 nohup Linux nohup Linux no…

【Python】仅7行代码实现自动化天气报时

文章目录前言一、实现步骤二、请求天气接口1.引入库2.读入数据3.钉钉通知天气预报总结前言 早上出门上班前,我总是忘记查看天气预报,以至于通勤路上下雨来了个措手不及。 回想起来,大部分人早上出门前的行为模式是固定的,那么有…

一个基于stream的EPICS IOC应用程序

本文将介绍如何开发一个基于stream的EPICS IOC应用程序,其将作为一个简单的基于消息的设备(用于EPICS stream练习的设备模拟程序_yuyuyuliang00的博客-CSDN博客中最后一个python程序模拟的设备)的IOC控制程序。 1) 按如下步骤建立这个IOC程序…

vb+access大气污染模型系统

数据模型就是按专业的要求,用数字方式描述自然界的事物或现象以及他们的关系。 我们通过对地区的具体数值和情况的观察,对大气质量状况做出分析,建立一个符合当地情况的大气污染模型,用来测量大气污染浓度,并根据污染…

在公司兢兢业业5年,被新来的自动化测试倒挂了薪资…

去年年中朋友左思右想从工作了 5 年的企业离职,离职原因很简单,待疲了,薪资也没咋涨过,新来的自动化测试钱比 Ta 高一倍。但离职 Ta 还是很忐忑的,在这个公司待得久了,自己会的东西一直是那些,业…

Python3爬虫图片抓取

在上一章中,我们已经学会了如何使用Python3爬虫抓取文字,那么在本章教程中,将通过实例来教大家如何使用Python3爬虫批量抓取图片。注:该网站目前已经更换了图片的请求方式,以下爬虫方法只能作为思路参考,已…

【Linux】进程理解与学习-程序替换

环境:centos7.6,腾讯云服务器Linux文章都放在了专栏:【Linux】欢迎支持订阅 相关文章推荐: 【Linux】冯.诺依曼体系结构与操作系统 【Linux】进程理解与学习Ⅰ-进程概念 【Linux】进程理解与学习Ⅱ-进程状态 【Linux】进程理解与学…

想拿到10k-40k的offer,这些技能必不可少!作为程序员的你了解吗

总结了一份Java架构师的技能树,希望对Java编程的同学有点帮助 Java编程的技术点: ​ 计算机基础 ​ Java高级特性 设计模式 ​ 数据库 分布式系统 ​ 注意:下文主要是我个人的总结方法经验(面试学习和刷题笔记) 01…

aws codedeploy 在ec2实例和autoscaling组上进行蓝绿部署

参考资料 https://docs.amazonaws.cn/codedeploy/latest/userguide/reference-appspec-file-structure-hooks.htmlhttps://docs.amazonaws.cn/zh_cn/codedeploy/latest/userguide/applications.html为 EC2/本地蓝/绿部署创建部署组(控制台) 部署ec2比较…

面试角度看问题:消息队列详解(万字长文,绝对值得一看)

面试角度看问题:消息队列详解前言一、消息队列是什么?二、为什么要使用消息队列?1.解耦2.异步3.削峰三、消息队列有什么缺点?1.系统可用性降低2.系统复杂度提高3.一致性问题四、如何保证消息队列的高可用?1.RabbitMQ 的…

zookeeper

目录 1.软件架构的发展 2.了解zookeeper 2.1概述 2.2zookeeper的应用场景 2.3安装zookeeper 2.4zookeeper客户端命令 3.zookeeper简单操作 3.1zookeeper的数据结构 3.2节点的分类 3.3java代码操作zookeeper节点 3.4zookeeper的watch机制 3.4.1介绍 3.4.2NodeCache…

ERD Online 4.0.11 在线数据库建模、元数据协作平台(免费、私有部署)

ERD Online 是全球第一个开源、免费在线数据建模、元数据管理平台。提供简单易用的元数据设计、关系图设计、SQL查询等功能,辅以版本、导入、导出、数据源、SQL解析、审计、团队协作等功能、方便我们快速、安全的管理数据库中的元数据。 4.0.11 ❝ :memo: fix(erd):…

5亿融资与重磅新品双发布,杉数以智能决策技术变革中国产业运营模式

2023年3月30日,由杉数科技举办的“智能决策重塑增长”2023杉数科技智能决策前沿峰会在北京举行。会上发布了杉数新一轮融资消息,同时,面向零售快消的决策优化产品计划宇宙(Planiverse)与面向工业制造的决策优化产品数弈…

Flink (四) --------- Flink 运行时架构

目录一、系统架构1. 整体构成2. 作业管理器(JobManager)3. 任务管理器(TaskManager)二、作业提交流程1. 高层级抽象视角2. 独立模式(Standalone)3. YARN 集群三、 一些重要概念1. 数据流图(Data…

C的实用笔记36——几种常用的字符串处理API(一)

0、const关键字 1、知识点:const是与存储相关的关键字,用作常量声明,修饰普通变量和指针变量,表示只读。const修饰普通变量:,修饰后变量从可修改的左值变成不可修改的左值 const修饰指针变量:分…