python - 如何使用python填写和提交表单
问题描述
我在 mechanize 模块的帮助下填写了一个网页表单,但是当我运行我的代码时出现错误。我只想填写表格并成功提交。
我的尝试:
此堆栈答案中的代码片段
import re
from mechanize import Browser
username="Bob"
password="admin"
br = Browser()
# Ignore robots.txt
br.set_handle_robots( False )
# Google demands a user-agent that isn't a robot
br.addheaders = [('User-agent', 'Firefox')]
br.open("https://fb.vivoliker.com/app/fb/token")
br.select_form(name="order")
br["u"] = [username]
br["p"]=[password]
response = br.submit()
输出: 错误(FormNotFoundError)
但是我应该输入什么名称,br.select_form()
因为当我看到网页的源代码时,它们没有设置为该表单的名称属性。
网页表单的html源代码
<div class="container">
<form ls-form="fb-init">
<input type="hidden" name="machine_id">
<div class="form-group row">
<input id="u" type="text" class="form-control" placeholder="Facebook Username / Id / Email / Mobile Number" required="required">
</div>
<div class="form-group row">
<input id="p" type="password" class="form-control" placeholder="Facebook Password" required="required">
</div>
<div class="form-group row mt-3">
<button type="button" id='generating' class="btn btn-primary btn-block" onclick="if (!window.__cfRLUnblockHandlers) return false; get()" data-cf-modified-4e9e40fa9e78b45594c87eaa-="">Get Access Token</button>
</div>
<div ls-form="event"></div>
</form>
预期输出: 我的表单应该使用我给出的值提交。请参阅下面给出的此网页的 javascript。我想填写并提交此网页的表格: 网页源
解决方案
我相信您要选择的表格是ls-form=fb-init
但是,由于 mechanize 模块需要用下划线替换连字符以将 HTML attrs 转换为关键字参数,因此您可能希望这样编写:
br.select_form(ls_form='fb-init')
澄清一下,选择的正确形式不是命名为“order”,该形式命名为“fb-init”,它是一个ls-form(写为“ls_form”,带下划线)。所以随着变化,它应该是这样的:
import re
from mechanize import Browser
username="Bob"
password="admin"
br = Browser()
# Ignore robots.txt
br.set_handle_robots( False )
# Google demands a user-agent that isn't a robot
br.addheaders = [('User-agent', 'Firefox')]
br.open("https://fb.vivoliker.com/app/fb/token")
br.select_form(ls_form='fb-init')
然后从那里继续。
推荐阅读
- javascript - 语义 UI 下拉菜单:防止在以编程方式更改所选选项时触发 onchange 事件
- google-apps-script - 如何使用 Google Apps 脚本部署“Google 网站登录”
- angular - 希望显示 mat-tree-node 的所有名称(Angular material2)
- sql - 如何从查询中获得即时的流式传输结果?
- firemonkey - FireMonkey 中带有消息的启动画面
- python - wxPython 在运行时向 ScrolledWindow 添加/删除控件
- python - 为什么 multiprocessing.Process 不能调用对象实例的方法?无法理解泡菜的问题
- django - 将 Django-Rest-Framework 序列化程序从平面更改为嵌套?
- android - 来自 getContentResolver() 的游标空对象
- javascript - 在 Javascript 中的特定时间对音频样本进行编码