python表单交互

​ 下载的静态网页总是返回相同的内容,而与网页交互,根据用户输入返回对应的内容。HTML定义了两种向服务器提交数据的方法,分别是GET和POST。使用GET方法时候,会将类似于查询字符串格式?name1=val1&name2=val2的数据添加到URL中,由于浏览器存在URL长度限制,这种方法只适用于少量数据的场景,此外这种方法应当用于从服务器端获取数据,而不是修改数据。使用POST请求方法时候,数据在请求体中发送,与URL保持分离。敏感数据只应该使用POST请求进行发送,以避免将数据暴露在URL中。表单使用POST方法时,表单数据提交到服务器端有两种编码类型使用,默认是使用application/x-www-form-urlencoded此时所有非字母数字类型的字符都需要转换为十六进制的ASCII值,如果表单中包含大量非字母数字类型的字符时,这种编码类型效率就会非常低;文件上传时使用multipart/form-data作为编码类型,不会对数据进行编码,屙屎使用MIME协议将其作为多个部分进行发送。

​ 想要和表单进行交互,就需要拥有登录网站的用户账号。在能够处理验证问题后,可以实现自动化表单注册。cookie是网站在HTTP响应头中传输的少量数据,例如Set-Cookie: session_id=xxx,浏览器会存储这些数据,并在后续对该网站的请求头中包含它们。

# 提取表单中所有input标签的详情
import lxml.html as lh
import cookielib, urllib, pprint
def parse_form(html):tree = lh.fromstring(html)data = {}for e in tree.cssselect('form input'):if e.get('name'):data[e.get('name')] = e.get('value')return dataREGISTER_URL = 'http://xxx/register'
cj = cookielib.CookieJar()
opener = urllib.request.build_opener(urllib.HTTPCookieProcessor(cj))
html = opener.open(REGISTER_URL).read()
form = parse_form(html)
pprint.pprint(form)

​ 如何向服务器提交它所需要的登录信息,有时候会很复杂,可以现在浏览器中手工执行登录,然后在Python脚本中复用之前得到的cookie,从而实现自动登录。使用pip install mechanize安装Mechanize模块,提供了与表单交互的高级接口。

​ 验证码(CAPTCHA)用于测试用户是否为真实人类。首先使用光学字符识别(OCR),然后使用一个验证码处理API。为了在python中处理图像,可以安装pip install pillow包,pillow提供了一个便捷的Image类,其中包含了很多用于处理验证码图像的高级方法。

from io import BytesIO
import lxml.html
from PIL import Imagedef get_captcha(html):# 从表单中获取图像数据tree = lxml.html.fromstring(html)img_data = tree.cssselect('div#recaptcha img')[0].get('src')img_data = img_data.partition(',')[-1]bin_img_data = img_data.decode('base64')file_like = BytesIO(bin_img_data)img = Image.open(file_like)return img

​ OCR用于从图像中抽取文本,可以使用pip install pytesseract安装pytesseract模块提供的开源的OCR引擎。

python表单交互相关推荐

  1. python之模拟登录与表单交互

    无论是简单网页还是采用异步加载技术的网页,都是通过GET方法请求网址来获取网页信息的.但如何通过获取登录表单后的信息的?本节将讲解Reqquests库的Post方法,通过观测表单代码和逆向工程来填写表 ...

  2. python表单数据系统_使用MultipartPostHandler用Python发布表单数据

    问题:使用Python的urllib2发布数据时,所有数据都是URL编码的,并作为内容类型发送:application/x-www-form-URL encoded.上载文件时,应将内容类型设置为mu ...

  3. 【Web安全】PHP与Web表单交互-POST方法与GET方法(看不懂你来打我)

    PHP与Web页面交互是实现PHP网站与用户交互的重要手段.在PHP中提供了两种与Web页面交互的方法,一种是通过Web表单提交数据,另一种是通过URL参数传递. 这里我们将详细讲解表单的相关知识,为 ...

  4. python表单提交的两种方式_Flask框架学习笔记之表单基础介绍与表单提交方式

    本文实例讲述了Flask框架学习笔记之表单基础介绍与表单提交方式.分享给大家供大家参考,具体如下: 表单介绍 表单是HTML页面中负责数据采集功能的部件.由表单标签,表单域和表单按钮组成.通过表单,将 ...

  5. 怎么改变表单option标签直接字体大小_不起眼却非常重要的表单交互

    表单是什么?是用户和app之间的对话.作为人机交互的一种重要入口,一个好的数据输入方式是很有必要去考虑的.但现实中,我们大多设计师和产品经理前期设计的时候就没有太多的考虑,到最后开发的时候就会发现问题 ...

  6. python表单文件请求_python处理multipart/form-data的请求方法

    方法1: import requests url = "http://www.xxxx.net/login" #参数拼凑,附件上传格式如picurl参数,其他表单参数值拼成tupl ...

  7. python表单验证_python表单验证封装

    在Web程序中往往包含大量的表单验证的工作,如:判断输入是否为空,是否符合规则. hello hostname: ip: port: phone: HTML #!/usr/bin/env python ...

  8. python表单提交的两种方式_详解flask表单提交的两种方式

    一.通用方式 通用方式就是使用ajax或者$.post来提交. 前端html ... data Submit &nbsp 将操作绑定 $(document).ready(function() ...

  9. python表单防重复提交_防止表单重复提交的几种策略

    表单重复提交是在多用户Web应用中最常见.带来很多麻烦的一个问题.有很多的应用场景都会遇到重复提交问题,比如: 点击提交按钮两次. 点击刷新按钮. 使用浏览器后退按钮重复之前的操作,导致重复提交表单. ...

最新文章

  1. Linux+Tomcat+Jdk1.8+jenkins环境搭建
  2. oracle服务器重启后监听启动
  3. JS中通过call方法实现继承
  4. 前端设置画布的高度_【后期修图】ps画布设置详解
  5. 华为:跨过时艰,向未来
  6. 如何用softmax和sigmoid来做多类分类和多标签分类
  7. python手机版做小游戏代码大全-20行python代码的入门级小游戏的详解
  8. [netplus]初见,Netplus快速开始之PingPong Example
  9. TB,PB, Eb, Zb, YB
  10. iterm2新技能-用不同的颜色创建新标签
  11. 倾斜模型精细化处理_无人机倾斜摄影技术的三维精细模型制作
  12. 原来华为手机的拨号键盘除了打电话,还有这些隐藏功能,涨知识了
  13. MySQL数据库-删除表中的数据详解
  14. 2022-2023 ICPC Brazil Subregional Programming Contest
  15. 使用Mob进行短信验证码发送
  16. 网络管理实战 (1)理论篇
  17. 《麦肯锡方法》读书笔记14
  18. Centos7 Mysql5.6.40 高可用架构--MHA
  19. 修改RedHat启动项
  20. dragtoresize什么意思_drag to是什么意思

热门文章

  1. 【IA TSP】基于matlab免疫算法求解旅行商问题【含Matlab源码 195期】
  2. ZZULIOJ1164: 字符串加密
  3. Java编写山寨QQ中遇到的各种问题---登陆界面
  4. 无线电罗盘matlab,基于FPGA的无线电罗盘的方位角解调
  5. matlab: 图片—视频 互存
  6. Hitpoint合作伙伴——铂略咨询“营改增”课程苏州举行
  7. VRay Next for SketchUp 布料渲染与布料插件应用一例
  8. 详解服务器端渲染 页面(SSR)
  9. 【幻化万千戏红尘】千峰培训Day01-java基础学习:历史、数据类型
  10. 关于客户感知价值提升的思考(二)