代码之家  ›  专栏  ›  技术社区  ›  Pete

输入表单的数据未保存

  •  2
  • Pete  · 技术社区  · 7 年前

    我正在尝试编写一个脚本,可以从以下位置为多个邮政编码生成保险报价 this site . 到目前为止,我已经成功地将数据输入到对话框中。手动输入包括:单击邮政编码字段,打开一个对话框,输入邮政编码,然后单击“继续”。

    到目前为止,我的脚本如下所示:

    document.querySelector('.btn.btn-default.postal-code').click();
    window.setTimeout(function() {
      document.getElementById("PostalCode").value = "K0A1B0";
    }, 2000);
    window.setTimeout(function() {
      document.querySelector('.btn.btn-orange.validate-postal-code').click();
    }, 2000);
    

    如果执行前两行,将打开对话框,正确输入邮政编码。

    如果我全部执行,邮政编码似乎不会更改,但对话框会关闭。但是,该值不会保存在主页上的字段中。我做错了什么?

    我已经做了一些搜索,并尝试在关闭前提交表单,但我真的不知道我需要在这里做什么。这两项都不起作用:

    document.forms[0].submit();
    document.getElementById("PostalCode").submit();
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   Racil Hilan    7 年前

    当您使用 setTimeout ,它在指定的时间安排执行,然后继续执行下一行。在您的情况下 设置超时 2秒后,几乎同时执行行。第二个可以使用4秒:

    document.querySelector('.btn.btn-default.postal-code').click();
    window.setTimeout(function() {
        document.getElementById("PostalCode").value = "K0A1B0";
    }, 2000);
    window.setTimeout(function(){
         document.querySelector('.btn.btn-orange.validate-postal-code').click();
    }, 4000);
    

    或者,您可以在第一个内调用第二个,在这种情况下,第一个将在2秒后执行,并将第二个安排在2秒后执行:

    document.querySelector('.btn.btn-default.postal-code').click();
    window.setTimeout(function() {
        document.getElementById("PostalCode").value = "K0A1B0";
        window.setTimeout(function() {
            document.querySelector('.btn.btn-orange.validate-postal-code').click();
        }, 2000);
    }, 2000);
    

    编辑 当触发键盘事件时,该值将被验证并复制到主页面。您可以在JavaScript中模拟,但在jQuery中更容易实现,因为网站使用它。添加 trigger("change") 更改值后,您将看到验证的邮政编码并复制到主页上的框中:

    document.querySelector('.btn.btn-default.postal-code').click();
    window.setTimeout(function() {
      $("#PostalCode").val("K1A1B0").trigger("change");
    }, 2000);
    window.setTimeout(function() {
      document.querySelector('.btn.btn-orange.validate-postal-code').click();
    }, 4000);
    

    注意:如果您在上述代码中使用了无效的邮政编码,则该值将更改并被复制,但您将看到验证消息,弹出窗口将保持打开状态。如果要手动验证邮政编码,请调用 ValidatePostalCode() 作用它返回 true false ,并在此基础上决定下一步要做什么。

        2
  •  0
  •   Aditya    7 年前

    也许 吧。。。

    这可能是因为您正在设置值,

    窗setTimeout(function(){document.getElementById(“PostalCode”).value=“K0A1B0”},2000);

    同时也在同一时间提交。。。这就是问题所在。

    窗setTimeout(function(){document.querySelector('.btn.btn orange.validate posal code')。单击();},2000);

    试试这个。。。

    var execute = function () {
      'use-strict';
       document.querySelector('.btn.btn-default.postal-code').click();
       window.setTimeout(function(){document.getElementById("PostalCode").value = "K0A1B0";}, 2000);
       window.setTimeout(function(){document.querySelector('.btn.btn-orange.validate-postal-code').click();}, 3000);
    }();