gpt4 book ai didi

python 在网页中自动填充表单

转载 作者:太空宇宙 更新时间:2023-11-03 14:55:37 30 4
gpt4 key购买 nike

我正在尝试在具有单个文本框和发送按钮的网页中填写表单,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>

我尝试使用 mechanize 使用此代码提交表单

import re
from mechanize import Browser

br = Browser()
response=br.open("https://abcd.com/")
for f in br.forms():
if f.attrs['class'] == 'form-horizontal':
br.form = f
text = br.form.find_control(id="Text")
text.value = "something"
br.submit()

代码运行没有错误,但是没有提交,怎么办?

这是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
}

});
}

}

最佳答案

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

br.submit(type='button', id='Send')

submit 方法采用与 HTML Forms API 相同的参数,因此我建议查看 documentation了解更多详情。

更新

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

第二次更新

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

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 读出 __RequestVerificationToken,因为我怀疑它是在您每次打开网站时生成的。您可以使用 html_source = br.read() 读出 HTML 源代码,然后搜索 __RequestVerificationToken 并尝试提取相应的值。

关于python 在网页中自动填充表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45606531/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com