最近总是要填问卷星问题多达30个,每天一次非常麻烦,于是打算写个脚本自动完成。
本来想用python的selenium配合可开发的火狐浏览器驱动实现(毕竟网上大家都是这么做的)。可是由于以下几个问题让我取消了这个念头:

  1. 【主要原因】不知道网怎么了就是打不开github下载不了驱动。
  2. 本质上还需要对网页布局和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,代码复制里面,回车。

其中用了三张图片。



这三个图片的作用分别为:

  1. 确定地址框的位置
  2. 确定console的位置
  3. 确定目标网页是否加载完成

使用的顺序是 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 】相关推荐

  1. HTML form表单自动填写自动提交

    今天完成的任务是点击买家登陆超链接,以buyer自动登录,点击卖家登陆超链接,自动以seller登陆 1.跳转到登陆页面有用户名和密码的输入框和提交按钮,为了实现自动填表和自动提交 在form表单中对 ...

  2. 插入的表单控制下拉框怎么设置_想要告别表单重复填写?这一个功能就够了

    「表单填写关联」这个功能,小伙伴们有没有用过?在一些日常工作中,很多小伙伴习惯使用表单来提升工作效率,在使用过程中,经常会遇到一些问题,例如,不同的表单,相同的信息,需要重复填写,一次两次还好,可是像 ...

  3. Html 中表单提交的一些知识总结——防止表单自动提交,以及submit和button提交表单的区别...

    转自:http://jackaudrey.blog.163.com/blog/static/1314217882010590041833/ 在页面中有多个input type="text&q ...

  4. 解决谷歌浏览器form表单自动填充

    解决谷歌浏览器form表单自动填充 前言 取消谷歌浏览器form表单的填充 Promise的理解和用法 基于vue-element前端开发时,修改element-ui组件的样式 不说再见 前言 时间如 ...

  5. html表单自动编号,Q&A|如何实现会员自动编号?

    原标题:Q&A|如何实现会员自动编号? Hi,小伙伴们,大家好!表姐又来给大家答疑解惑啦!这一期的Q&A我们来聊聊如何实现提交表单自动生成会员编号. 在一些填表场景中,我们可能希望能预 ...

  6. 迅睿CMS 创建网站表单

    网站表单性能和内容模块一样,支持百万级数据,附表按5万为基数自动分表. 网站表单可以做什么? 1.友情链接 2.用户留言 3.网站证书 4.在线订单(需配合交易系统) 5.在线报名 如何创建网站表单? ...

  7. 留言提交成功页面html,织梦自定义表单自动获取用户IP、提交时间、留言页面的方法...

    织梦的自定义表单功能很好用.下面讲解如何利用织梦自定义表单自动获取用户IP.提交时间.留言页面,并转发邮箱. 第一步,在织梦后台新建自定义表单.并添加字段:uname(姓名).utel(电话).uip ...

  8. php 自动验证表单类,thinkPHP 表单自动验证功能

    昨天晚上我们老大叫我弄表单自动验证功能,愁了半天借鉴了好多官网的知识,才出来,诶,总之分享一下我自己的成果吧! thinkphp 在Model基类为我们定义了自动验证的函数和正则表达式,我们只需要在对 ...

  9. php 表单提交及验证 tp,ThinkPHP表单自动提交验证实例教程

    ThinkPHP表单自动提交验证实例教程 附加规则 配合验证规则使用,包括: function 使用函数验证,前面定义的验证规则是一个函数名 callback 使用方法验证,前面定义的验证规则是一个当 ...

最新文章

  1. ssl 和 https
  2. Share Point 2013使用Windows PowerShell 获取,删除UserProFile
  3. 搜索引擎平台化的构想
  4. R语言 非中心化F分布
  5. hdu 4857 Little Devil I
  6. Winform中设置ZedGraph的颜色填充使用Fill
  7. 《Windows游戏编程大师技巧》三、Windows高级编程
  8. 对于SpringMVC框架使用的时候出现“警告: No mapping found for HTTP request with URI [/login]”的问题解决方案...
  9. MS的完整形式是什么?
  10. inux下切换到root权限有以下几种方式
  11. macOS下安装ENVI
  12. 7450清零_联想M7450F打印机加粉清零方法
  13. 2022年web前端面试题
  14. WIFI中的关键词,频率,频段,频宽,频带...你晕了没??.
  15. 麒麟操作系统配置web服务器,银河麒麟服务器设置
  16. eclipse发生了错误,请参阅日志文件怎么办呀
  17. 什么是电线老化?如何辨别?
  18. MATLAB主窗口中 主菜单栏有,【图片】MATLAB软件~~【西雅吧】_百度贴吧
  19. Reactor模式--VS--Proactor模式
  20. git branch 和 git checkout -b 创建新brach的区别

热门文章

  1. java基础代码练习
  2. 国家开发银行广东省分行
  3. 有没有Type-C接口的无线投屏器?HDMI、USB、Type-C接口的无线投屏器又有什么区别呢?
  4. 网页上的广告条设计[zt]
  5. centos7 teamspeak3的搭建
  6. MATLAB2018B下用Faster-RCNN做目标检测的训练和测试步骤
  7. linux 网站服务器优化 web server优化
  8. IPU VPU GPU
  9. Codevs 3729==洛谷P1941 飞扬的小鸟
  10. 查询mysql数据库中各shema中的表数量【存储过程】