使用Python提交带有JavaScript目标的表单

1 投票
1 回答
2850 浏览
提问于 2025-04-18 05:50

背景

我有一个HTML表单,想用Python的Requests模块来提交。

这是表单的HTML代码:

<form name="main" id="main" method="post" onSubmit="return validateForm(this);">

涉及的Javascript文件

validateForm()函数是这样的:

      function validateForm(form)
      {
        if (form.buttonClicked[0].value == "delete"){
          deleteCount += 1;

          if (deleteCount > 1){

           return false;
          }
          if(form.allowValidateOnDelete && form.allowValidateOnDelete.value == "true")
          {
            deleteCount = 0;
            return validate(form);
          }
          else
          {
            return true;
          }
        }
        else{
          return validate(form);
        }
      }

这是validate()

function trimAll(form)
{
  form.forwardedToNumber.value = trim(form.forwardedToNumber.value);
}

function validate(form)
{
    trimAll(form);

    for (var i=0; i < form.active.length; i++) {
      if (form.active[i].checked) {
        if (form.active[i].value == "false") {
          return true;
        }
      }
    }

    if (form.forwardedToNumber.value == "") {
        alert(errorText(1000, errorText(2201)));
        form.forwardedToNumber.select();
        return false;
    }

    return true;
}

问题

我该如何用Python提交这个表单呢?

我不能直接提交下面的例子,因为它作为一个URI没有意义:

session.request(
    'POST', 
    'https://example.com/return validateForm(this);', 
    data={'active': 'true'}
)

我该如何提交一个目标是return function();的表单呢?

1 个回答

3

不要把 onSubmit 处理程序和表单的 action 混淆了。简单来说,action 是指数据要发送到的地址(也就是网址)。而 onSubmit 就像一个开关,一旦用户提交表单,它就会被激活。如果这个处理程序返回 false,表单的数据就根本不会发送到服务器。

如果你想用 requests 来做到这一点,你需要先弄清楚表单的 action 属性是什么。如果表单没有 action 属性,那么它会把数据发送到获取表单的那个网址。

撰写回答