利用 Powershell 编写简单的浏览器脚本
生活中有很多事情是低效益,重复性。比如每天上某些网站,先登录再签到打卡,比如每隔一段时间清理回收站的文件等等。一个成熟的软件工程师应该想到用软件解决他。
对于这些简单的小任务,一般用脚本实现。比如Python脚本或者JavaScript脚本等等,不过还得装运行环境。如果能在电脑上直接用就好了,那么有没有呢。
有,那就是基于命令行(.bat)脚本或者 Powershell 脚本(.ps1),这两个东东都是 Windows 自带运行环境的,比较方便的脚本。
而本文的主角就是 Powershell。
PowerShell 是一种跨平台的任务自动化和配置管理框架,由命令行管理程序和脚本语言组成。 与大多数接受并返回文本的 shell 不同,PowerShell 构建在 .NET 公共语言运行时 (CLR) 的基础之上,接受并返回 .NET 对象。 这一根本上的改变引入了全新的自动化工具和方法。详见 Powershell官方说明
长话短说,Show me the code。
下面是一个简单的示例,我准备写一个脚本,控制 IE 浏览器打开百度,然后搜索“微软药丸”,看看专业的药丸师有什么见解。
#输入url
$Url = "http://baidu.com" $Keyword = "微软药丸" #创建一个IE对象
$IE = New-Object -com internetexplorer.application
$IE.visible = $true #导航到URL
$IE.navigate($url); #等待完全加载
while ($IE.Busy -eq $true) {
Start-Sleep -s 1
Write-Host "wait for loading..." -ForegroundColor Gray
} #在Console 打印 Log
Write-Host "Enter Baidu Main Page" -ForegroundColor Cyan #输入关键词
$IE.Document.getElementById("kw").value = $Keyword #在按钮上执行点击事件
$IE.Document.getElementById("su").Click()
Write-Host "Submit keyword" -ForegroundColor Cyan
start-sleep -milliseconds 500
Write-Host "Entering Selfservice/Dinner" -ForegroundColor Cyan #等待页面加载
while ($IE.Busy -eq $true) {
Write-Host "wait for loading..." -ForegroundColor Gray
Start-Sleep -s 1
} #没有意义的等待延时,就是任性一下
Start-Sleep -s 1 Write-Host "Bye!" -ForegroundColor Cyan
在记事本输入这些代码,保存为 Baidu.ps1 文件。
在文件所在目录按住SHIFT键,在当前目录启动 Powershell。
输入.\Baidu.ps1,就可以执行了。
下面就是执行效果,完美~
这只是一个简单的例子,但是麻雀虽小,五脏俱全,我想介绍的启动 IE,输入文本,模拟点击,输出Log 都用到了。
你也可以用他来登录某些网站进行签到,领奖,打卡等等,思路是一样的。总之浏览器能做的事情都可以将其程序自动化。
这个时候你或许会觉得,哎,我每次都用手动执行脚本,那也不省事呀。能不能每天领一次奖呢?
Absolutely,下回我们简单介绍一下如何用“Windows任务计划”把脚本安排得明明白白。
========================== PS ===================================
1.Powershell的相关文章里面,通过IE获取元素一般写的是
$IE.Document.getElementById("kw")
本文也是,这个东西一般没啥问题,但是真出问题你就头疼,比如在Win10环境中我需要获取的某个Button元素一直找不到,然后还搜不到原因,一度没法使用。
但是最终在文档找到 了 IE 的全新 COM接口
$IE.Document.IHTMLDocument3_getElementById("kw")
如果执行脚本时发现类似下面这样的错误,搜百度也解决不了,那么请试试使用新的API。
Exception from HRESULT: 0x800A138A
At <path>.ps1:
char:5
+ $IE.Document.getElementsByID("kw").Click();
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ CategoryInfo : OperationStopped: (:) [], COMException
+ FullyQualifiedErrorId : System.Runtime.InteropServices.COMException
由于Powershell是通过COM接口去控制IE的,所以这个问题时 IE 浏览器的锅。因为它是预装的,而且IE11完全够用,一般还是用他。
以上。
利用 Powershell 编写简单的浏览器脚本的更多相关文章
- Python 利用Python编写简单网络爬虫实例3
利用Python编写简单网络爬虫实例3 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站“http://bbs.51testing. ...
- Python 利用Python编写简单网络爬虫实例2
利用Python编写简单网络爬虫实例2 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站“http://www.51testing. ...
- ROS Learning-010 beginner_Tutorials 编写简单的启动脚本文件(.launch 文件)
ROS Indigo beginner_Tutorials-09 编写简单的启动脚本文件 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.0 ...
- 编写简单的辅助脚本来在 Google 表格上记账
我的第二份工作入职在即,而这一次则真的是完全跑到了一个陌生的城市了.租房,购置相关用品,还尚未工作钱就花掉一堆.尽管我个人之前一直都没有过记账的习惯,但为了让自己能够搞清楚自己的钱都花在哪里了,于是还 ...
- 利用java编写的盲注脚本
之前在网上见到一个盲注的题目,正好闲来无事,便用java写了个盲注脚本,并记录下过程中的坑 题目源码: <?php header("Content-Type: text/html;ch ...
- 小鸟初学Shell编程(二)编写简单的Shell脚本
Shell脚本 编写Python.PHP脚本通常需要掌握语言的函数,那么Shell脚本则不需要,只需要掌握Linux命令就可以编写Shell脚本,因为Shell脚本就是由多个Linux命令组成,通过将 ...
- (八) .launch文件 ---编写简单的启动脚本文件
下面我们将介绍,如何编写一个启动脚本程序:(.launch文件) 还记得我们在 创建ROS软件包教程 中创建的第一个程序包(beginner_tutorials)吗,现在我们要使用它. 在 begin ...
- 利用Java编写简单的WebService实例
使用Axis编写WebService比較简单,就我的理解,WebService的实现代码和编写Java代码事实上没有什么差别,主要是将哪些Java类公布为WebService. 以下是一个从编写測试样 ...
- 利用Java编写简单的WebService实例-转载
使用Axis编写WebService比较简单,就我的理解,WebService的实现代码和编写Java代码其实没有什么区别,主要是将哪些Java类发布为WebService.下面是一个从编写测试例子到 ...
随机推荐
- BitArray虽好,但请不要滥用,又一次线上内存暴增排查
一:背景 1. 讲故事 前天写了一篇大内存排查在园子里挺火,这是做自媒体最开心的事拉,干脆再来一篇满足大家胃口,上个月我写了一篇博客提到过使用bitmap对原来的List<CustomerID& ...
- 王艳 201771010127《面向对象程序设计(java)》第九周学习总结
实验九 异常.断言与日志 实验时间 2018-10-25 1.实验目的与要求 (1) 掌握java异常处理技术: (2) 了解断言的用法: (3) 了解日志的用途: (4) 掌握程序基础调试技巧: 一 ...
- 本地项目链接github项目库
本地有个用了好久用来测试功能的项目,今天用来测试链接github项目库,做一下记录 目标:把本地的项目和github上的项目连接起来 工具:sourceTree sourceTree提供了gi ...
- Node.js NPM Tutorial
Node.js NPM Tutorial – How to Get Started with NPM? NPM is the core of any application that is devel ...
- 约瑟夫环(超好的代码存档)--19--约瑟夫环--LeetCode面试题62(圆圈最后剩下的数字)
圆圈中最后剩下的数字 0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字.求出这个圆圈里剩下的最后一个数字. 例如,0.1.2.3.4这5个数字组成一个圆圈,从数字0 ...
- JUC整理笔记二之聊聊volatile
要想学好JUC,还得先了解 volatile 这个关键字.了解 volatile ,我们从一个例子开始吧. 本文不会很详细去说java内存模型,只是很简单地学习一下volatile 一个例子 pack ...
- JS轮播图带序号小点和左右按钮
轮播图作为前端比较简易的动画,使用非常频繁,这里记录以便使用 此轮播图为最简易自动播放,非无缝,但有按钮,有序号跳转小点 想看全套轮播图可以查看我的分类轮播图全套 html布局 <div sty ...
- 重学 Java 设计模式:实战建造者模式
作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 乱码七糟 [luàn qī bā zāo],我时常怀疑这个成语 ...
- 什么,容器太多操作不过来?我选择Docker Compose梭哈
接上一篇:面试官:你说你精通 Docker,那你来详细说说 Dockerfile 吧 一.容器之间通信 1.单向通信 1.1.什么意思 mysql和tomcat是两个独立的容器,但是tomcat需要和 ...
- HTTP/2 简介及https原理
注:以下内容节选自<高性能浏览器网络>(出版社:O'Reilly,作者:Ilya Grigorik). 要了解完整版本和相关内容,请访问 hpbn.co. HTTP/2 可以让我们的应用更 ...