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. 【AI2】喜讯!app inventor最近进展,实现流媒体视频播放
  2. python找不到指定的文件夹里_Python环球网在Unix中的指定文件路径中找不到*.txt
  3. jetty9更改post请求长度
  4. 转:数字对讲机常识介绍
  5. SQL内连接、外连接、全连接、交叉连接、自连接、自然连接
  6. python时间序列模型有哪些_时间序列模型(ARIMA)
  7. 深度之眼Pytorch打卡(六):将数据集切分成训练集、验证集和测试集的方法
  8. Python网络爬虫和信息提取
  9. Android 图片 批量上传,移动端图片批量上传问题
  10. Wopus问答第一期
  11. Axure RP9教程 内部框架
  12. Filebrowser:一款轻量级个人网盘
  13. 【java】java中输出字符串中的单个字符及获得其长度
  14. 号称下一代监控系统,到底有多牛逼!
  15. 马上:Android pins 模块化架构
  16. 关于相干信号的阵列处理
  17. matlab带延迟环节的单位阶跃响应,典型环节的单位阶跃响应.doc
  18. C#正则匹配(提取字符串中的数字)及C#“四舍五入”
  19. 最新长三角shp底图(两省一市+安徽)
  20. 群晖NAS简介(转)

热门文章

  1. 如何使用React Image Lightbox
  2. 还怕学不会数据库sql语句吗??
  3. python开发基础2.23技能实训答案_【23】Python基础笔记2
  4. DropDownList
  5. 买股票的步骤及基础常识
  6. kali linux忘记开机密码,kali linux 忘记root密码重置办法
  7. 【3D数学基础】三维空间折射向量计算
  8. EdgeX(6)摄像头配置 onvif之后使用,onvif device test tool(ONVIF测试工具) 进行测试,了解相关接口。
  9. jQuery中append()和appendTo()的区别
  10. Java---string类和内部类