网站表单自动填写【使用pyautogui 】
最近总是要填问卷星问题多达30个,每天一次非常麻烦,于是打算写个脚本自动完成。
本来想用python的selenium配合可开发的火狐浏览器驱动实现(毕竟网上大家都是这么做的)。可是由于以下几个问题让我取消了这个念头:
- 【主要原因】不知道网怎么了就是打不开github下载不了驱动。
- 本质上还需要对网页布局和js进行针对性的分析,感觉还是写个js脚本,然后复制到 浏览器的console中运行算了。
就这样我先用 js 写出自动填写脚本,然后交给浏览器运行。之后还是想体验一下自动化过程,于是想到如果能控制鼠标,进行鼠标键盘操作就可以了,这样pyautogui就出现在我的视野中,其对鼠标位置的定位是通过屏幕图片搜索的,这个很让我吃惊(以前搞过通过程序控件的id确定位置)。
那就分章节简单介绍
js 脚本
需要根据网页自行分析,有时还需要分析js脚本。通过火狐或者谷歌浏览器。
给个示例
function getById(idnm){ return document.getElementById(idnm) }
function getCurrentDate() {var now = new Date();var year = now.getFullYear(); //得到年份var month = now.getMonth();//得到月份var date = now.getDate();//得到日期month = month + 1;if (month < 10) month = "0" + month;if (date < 10) date = "0" + date;return year + "-" + month + "-" + date;
}getById("q1").value="xx"
getById("q2_1").parentNode.click()
getById("q6").value="xxx"
getById("q7").value=getCurrentDate()getById("ctlNext").click()
半自动填写
就是用谷歌, ctrl+shift+j 把代码贴上回车就完成。
火狐是 ctrl+shift+k
使用pyautogui 全自动填写
自己把上面的过程走一次,这样就可以针对性的写程序。用到鼠标定位的部分,就自己提前截好图片。
下面的脚本运行过程包括。打开火狐浏览器找到输入网址的地方,输入网址(主要不要用那个什么typewrite),回车,等待网页加载结束, ctrl+shift+k 打开console,代码复制里面,回车。
其中用了三张图片。
这三个图片的作用分别为:
- 确定地址框的位置
- 确定console的位置
- 确定目标网页是否加载完成
使用的顺序是 1->3->2
import time
def p(*info): print(*info)
import osurl="https://www.wjx.top/m/xxxx.aspx"
os.system(r'"C:\Program Files\Mozilla Firefox\firefox.exe"')
time.sleep(1)
while True:cposition = pyautogui.locateOnScreen('pics/ff1.png')if cposition: breaktime.sleep(0.5)cc = pyautogui.center(cposition)
_bias=cposition.width
pyautogui.moveTo(cc[0]+_bias,cc[1])
pyautogui.click(clicks=1) # 点一下
set_text( url )
pyautogui.hotkey("Ctrl","v")
pyautogui.keyDown('Enter')time.sleep(2)
while True:cposition = pyautogui.locateOnScreen('pics/ff3.png')if cposition: breaktime.sleep(0.5)cc = pyautogui.center(cposition)
pyautogui.moveTo(cc[0],cc[1])
pyautogui.click(clicks=1)
pyautogui.hotkey("Ctrl","Shift","k")time.sleep(1)
while True:cposition = pyautogui.locateOnScreen('pics/ff2.png')if cposition: breaktime.sleep(0.5)with open("casia.js", encoding='UTF-8') as fp:#code=fp.readlines()code=fp.read()set_text( code )
pyautogui.hotkey("Ctrl","v")
#pyautogui.click(clicks=1)pyautogui.keyDown('Enter')
里面用到一个剪贴板复制的函数
import win32con
import win32clipboarddef set_text(string):win32clipboard.OpenClipboard()win32clipboard.EmptyClipboard()win32clipboard.SetClipboardData(win32con.CF_UNICODETEXT, string)win32clipboard.CloseClipboard()
总结
这种思路下,其实很多软件都可以自动执行了。以前真没有想到可以借助图片来辅助定位。当然图片一定要选择有特点的,否则会出现检测不到的情况。另外还要注意延时等待。
图片匹配的算法如果自己写的话可以参考 这里 。
网站表单自动填写【使用pyautogui 】相关推荐
- HTML form表单自动填写自动提交
今天完成的任务是点击买家登陆超链接,以buyer自动登录,点击卖家登陆超链接,自动以seller登陆 1.跳转到登陆页面有用户名和密码的输入框和提交按钮,为了实现自动填表和自动提交 在form表单中对 ...
- 插入的表单控制下拉框怎么设置_想要告别表单重复填写?这一个功能就够了
「表单填写关联」这个功能,小伙伴们有没有用过?在一些日常工作中,很多小伙伴习惯使用表单来提升工作效率,在使用过程中,经常会遇到一些问题,例如,不同的表单,相同的信息,需要重复填写,一次两次还好,可是像 ...
- Html 中表单提交的一些知识总结——防止表单自动提交,以及submit和button提交表单的区别...
转自:http://jackaudrey.blog.163.com/blog/static/1314217882010590041833/ 在页面中有多个input type="text&q ...
- 解决谷歌浏览器form表单自动填充
解决谷歌浏览器form表单自动填充 前言 取消谷歌浏览器form表单的填充 Promise的理解和用法 基于vue-element前端开发时,修改element-ui组件的样式 不说再见 前言 时间如 ...
- html表单自动编号,Q&A|如何实现会员自动编号?
原标题:Q&A|如何实现会员自动编号? Hi,小伙伴们,大家好!表姐又来给大家答疑解惑啦!这一期的Q&A我们来聊聊如何实现提交表单自动生成会员编号. 在一些填表场景中,我们可能希望能预 ...
- 迅睿CMS 创建网站表单
网站表单性能和内容模块一样,支持百万级数据,附表按5万为基数自动分表. 网站表单可以做什么? 1.友情链接 2.用户留言 3.网站证书 4.在线订单(需配合交易系统) 5.在线报名 如何创建网站表单? ...
- 留言提交成功页面html,织梦自定义表单自动获取用户IP、提交时间、留言页面的方法...
织梦的自定义表单功能很好用.下面讲解如何利用织梦自定义表单自动获取用户IP.提交时间.留言页面,并转发邮箱. 第一步,在织梦后台新建自定义表单.并添加字段:uname(姓名).utel(电话).uip ...
- php 自动验证表单类,thinkPHP 表单自动验证功能
昨天晚上我们老大叫我弄表单自动验证功能,愁了半天借鉴了好多官网的知识,才出来,诶,总之分享一下我自己的成果吧! thinkphp 在Model基类为我们定义了自动验证的函数和正则表达式,我们只需要在对 ...
- php 表单提交及验证 tp,ThinkPHP表单自动提交验证实例教程
ThinkPHP表单自动提交验证实例教程 附加规则 配合验证规则使用,包括: function 使用函数验证,前面定义的验证规则是一个函数名 callback 使用方法验证,前面定义的验证规则是一个当 ...
最新文章
- ssl 和 https
- Share Point 2013使用Windows PowerShell 获取,删除UserProFile
- 搜索引擎平台化的构想
- R语言 非中心化F分布
- hdu 4857 Little Devil I
- Winform中设置ZedGraph的颜色填充使用Fill
- 《Windows游戏编程大师技巧》三、Windows高级编程
- 对于SpringMVC框架使用的时候出现“警告: No mapping found for HTTP request with URI [/login]”的问题解决方案...
- MS的完整形式是什么?
- inux下切换到root权限有以下几种方式
- macOS下安装ENVI
- 7450清零_联想M7450F打印机加粉清零方法
- 2022年web前端面试题
- WIFI中的关键词,频率,频段,频宽,频带...你晕了没??.
- 麒麟操作系统配置web服务器,银河麒麟服务器设置
- eclipse发生了错误,请参阅日志文件怎么办呀
- 什么是电线老化?如何辨别?
- MATLAB主窗口中 主菜单栏有,【图片】MATLAB软件~~【西雅吧】_百度贴吧
- Reactor模式--VS--Proactor模式
- git branch 和 git checkout -b 创建新brach的区别