Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
网页中的python自动填充表单_Python_Html_Forms_Webpage_Mechanize - Fatal编程技术网

网页中的python自动填充表单

网页中的python自动填充表单,python,html,forms,webpage,mechanize,Python,Html,Forms,Webpage,Mechanize,我试图在一个网页中填写一个表单,该网页只有一个文本框和一个发送按钮,html如下所示 <form class="form-horizontal"> <div class="row"> <div class="col-md-12"> <div id="TextContainer" class

我试图在一个网页中填写一个表单,该网页只有一个文本框和一个发送按钮,html如下所示

<form class="form-horizontal">
                        <div class="row">
                            <div class="col-md-12">
                                <div id="TextContainer" class="textarea-container">
                                    <textarea id="Text" rows="5" maxlength="700" class="form-control remove-border" style="background:none;"></textarea>
                                </div><button id="Send" class="btn btn-primary-outline" type="button" onclick="SendMessage()" style="margin-top:10px" data-loading-text="Loading..."><span class="icon icon-pencil"></span> Send</button>
                            </div>
                        </div>
                    </form>
代码运行时没有错误,但没有提交,我该怎么做

下面是SendMessage函数

function SendMessage() {
    var text = $('#Text').val();
    var userId = $('#RecipientId').val();
    if (text.trim() === "")
    {
        $('#TextContainer').css('border-color', 'red');
    }
    else if (new RegExp("([a-zA-Z0-9]+://)?([a-zA-Z0-9_]+:[a-zA-Z0-9_]+@)?([a-zA-Z0-9.-]+\\.[A-Za-z]{2,4})(:[0-9]+)?(/.*)?").test(text))
    {
        $('#TextContainer').css('border-color', 'red');
        $('#message').html("Links are not allowed in messages");
    }
    else
    {
        $('#Send').button('loading');
        $.ajax(
        {
            url: '/Messages/SendMessage',
            type: 'POST',
            cache: false,
            data:
            {
                __RequestVerificationToken: $('<input name="__RequestVerificationToken" type="hidden" value="CfDJ8MQSRebrM95Pv2f7WNJmKQWGnVR66zie_VVqFsquOCZLDuYRRBPP1yzk_755VDntlD3u0L3P-YYR0-Aqqh1qIjd09HrBg8GNiN_AU48MMlrOtUKDyJyYCJrD918coQPG0dmgkLR3W85gV6P4zObdEMw" />').attr('value'),
                userId: userId,
                text: text
            }

        });
    }

}
函数SendMessage(){
var text=$('#text').val();
var userId=$('#RecipientId').val();
如果(text.trim()==“”)
{
$('#TextContainer').css('border-color','red');
}
如果(新的RegExp(([a-zA-Z0-9]+:/)?([a-zA-Z0-9+:[a-zA-Z0-9+])([a-zA-Z0-9.-]+\.[a-zA-z]{2,4})(:[0-9]+)?(/。)测试(文本)
{
$('#TextContainer').css('border-color','red');
$('#message').html(“邮件中不允许有链接”);
}
其他的
{
$('发送')。按钮('加载');
$.ajax(
{
url:“/Messages/SendMessage”,
键入:“POST”,
cache:false,
数据:
{
__RequestVerificationToken:$('').attr('value'),
userId:userId,
文本:文本
}
});
}
}

我怀疑问题在于HTML表单中的submit按钮不是
类型=submit
——因此mechanise在调用
br.submit()时不知道该怎么做。修复方法是更改HTML网站上的按钮类型,或者告诉浏览器要使用哪个按钮提交表单:

br.submit(type='button', id='Send')
submit
方法采用与HTML表单API相同的参数,因此我建议查看以了解更多详细信息

更新

这里的问题似乎是附加到按钮的JavaScript方法。Mechanize不支持调用JavaScript函数,因此您不能仅使用
.submit()
方法提交表单。相反,最好的选择可能是读入
SendMessage()
JavaScript函数,如果有人单击Send按钮,就会调用该函数,然后手动将其转换为Python。在最好的情况下,它由一个简单的AJAX POST请求组成,在Python中很容易实现。请回答相关问题

第二次更新

根据问题中的新信息,特别是JavaScript函数,现在可以在Python脚本中手动实现POST请求。我建议使用模块,这将使实现更加容易

import requests

data = {
    "__RequestVerificationToken": "CfDJ8MQSRebrM95Pv2f7WNJmKQWGnVR66zie_VVqFsquOCZLDuYRRBPP1yzk_755VDntlD3u0L3P-YYR0-Aqqh1qIjd09HrBg8GNiN_AU48MMlrOtUKDyJyYCJrD918coQPG0dmgkLR3W85gV6P4zObdEMw",
    "userId": "something",
    "text": "something else"
}

response = requests.post("https://example.com/Messages/SendMessage", data=data)

response
现在将包含可用于检查请求是否成功的响应。请注意,您可能需要使用mechanize读取
\uu RequestVerificationToken
,因为我怀疑它是在每次打开网站时生成的。您可以使用
HTML\u source=br.read()
读取HTML源代码,然后搜索
\u RequestVerificationToken
并尝试提取相应的值。

您可以为文本区域指定名称属性,如:

<form class="form-horizontal">
                        <div class="row">
                            <div class="col-md-12">
                                <div id="TextContainer" class="textarea-container">
                                    <textarea id="Text" name="sometext" rows="5" maxlength="700" class="form-control remove-border" style="background:none;"></textarea>
                                </div><button id="Send" class="btn btn-primary-outline" type="button" onclick="SendMessage()" style="margin-top:10px" data-loading-text="Loading..."><span class="icon icon-pencil"></span> Send</button>
                            </div>
                        </div>
                    </form>

如果它成功提交表单,那么你可以阅读你的回复正文。

它抛出了这个错误
mechanize.\u form.ControlNotFoundError:没有控件匹配类型“button”、类型“clickable”、id“Send”
试着只按id执行,即
br.submit(id='Send')
,看看是否有效?问题是
SendMessage()
JavaScript函数。我已经更新了我的答案,并建议如何解决这个问题。我已经更新了函数,我也知道用户ID,但是验证令牌呢?我更新了响应,并建议了如何处理。
<form class="form-horizontal">
                        <div class="row">
                            <div class="col-md-12">
                                <div id="TextContainer" class="textarea-container">
                                    <textarea id="Text" name="sometext" rows="5" maxlength="700" class="form-control remove-border" style="background:none;"></textarea>
                                </div><button id="Send" class="btn btn-primary-outline" type="button" onclick="SendMessage()" style="margin-top:10px" data-loading-text="Loading..."><span class="icon icon-pencil"></span> Send</button>
                            </div>
                        </div>
                    </form>
import re
from mechanize import Browser

br = mechanize.Browser()
br.open("https://abcd.com/")
br.select_form(nr=0) #in case of just single form you can select form passing nr=0
br["sometext"] = "something"
response  = br.submit()
print(response.read())