【问题标题】:Automatically click on each tab in webbrowser and click on submit button自动单击浏览器中的每个选项卡,然后单击提交按钮
【发布时间】:2021-12-04 15:41:33
【问题描述】:

鉴于在浏览器中打开的一组网页都来自同一个网站,每个网页都有一个提交按钮,是否可以编写一些内容依次转到每个选项卡并单击提交按钮?

我想知道是否可以使用用户脚本管理器来完成类似的操作,例如 Greasemonkey 或 Tampermonkey。

或者,或者,是否有某种方法可以在打开网页而不是仅仅打开页面时打开它,等待它加载,然后按下提交按钮?

网页是通过form打开的,而不是window.open()

<form target="_blank" action="https://acoustid.org/edit/toggle-track-mbid" method="POST">
    <input name="state" value="1" hidden="">
    <input name="track_id" value="9509889" hidden="">
    <input name="mbid" value="6573f01d-0df5-442d-90c3-a69783c217c3" hidden="">
    <input type="submit" value="Unlink">
</form>

Here's the website。点击取消链接打开一个新窗口并查看表单(你需要一个帐户):

它的 HTML 是:

<form method="POST" action="/edit/toggle-track-mbid">

    <div class="form-group">
      <label for="note_i">Comment:</label>
      <textarea class="form-control" name="note" id="name_i"></textarea>
    </div>
    
    <input type="hidden" name="mbid" value="b3350a3b-b8e0-45c0-8289-006451788849">
    <input type="hidden" name="track_id" value="12211538">
    <input type="hidden" name="state" value="1">
    <input type="hidden" name="submit" value="1">
    <input type="submit" class="btn btn-default" value="Submit">

</form>

【问题讨论】:

  • 是否所有的窗口/标签都打开BY同一个浏览器窗口?如果该答案是“否” - 总体答案是“不,不是来自在浏览器上运行的 JavaScript”。
  • @RandyCasburn 是的
  • 新窗口通过表单发布打开(服务器打开页面)。所以没有办法实现你的目标。
  • @double-beep 谢谢我现在有一个不同的解决方案,我设法提交表单,这样我就不再需要在表单上按提交,因为原始表单提交有足够的服务器信息无需转到其他页面即可对其进行操作

标签: javascript html userscripts


【解决方案1】:

form 可以在不实际打开新标签页的情况下提交。 UnlinkSubmit 表单的区别在于后者有两个新值:submit 设置为1(即提交表单时取消链接)和@ 987654324@,解释取消链接的评论。

不过,自从发布问题以来,您已将submit=1 参数添加到第一个表单中,以便可以通过单击Unlink 按钮直接取消链接轨道。

这是一个稍微自动化流程的解决方案:

// ==UserScript==
// @name         Submit all forms
// @version      0.1
// @description  see https://stackoverflow.com/questions/70227065
// @author       double-beep
// @match        http://reports.albunack.net/*.html
// @grant        GM_xmlhttpRequest
// ==/UserScript==

(function() {
    'use strict';

    async function submitAllForms() {
        const forms = document.querySelectorAll('table > tbody > tr > :nth-child(2) > form');

        const formPromises = [...forms].map(form => {
            const formData = new FormData(form);
            if (!formData.get('submit')) { // old version of the website
                formData.set('submit', '1');
            }

            return new Promise((resolve, reject) => {
                GM_xmlhttpRequest({
                    method: 'POST', // post
                    url: form.action,
                    data: formData,
                    onload: resolve,
                    onerror: reject
                });
            });
        });

        await Promise.all(formPromises);
    }

    const submitButton = document.createElement('input');
    submitButton.value = 'Submit forms';
    submitButton.type = 'submit';
    submitButton.addEventListener('click', async () => {
        submitButton.disabled = true;
        submitButton.innerText = 'Please wait...';

        await submitAllForms();

        submitButton.disabled = false;
        submitButton.value = 'Re-submit forms';
    });

    document
        .querySelector('table')
        .previousElementSibling
        .insertAdjacentElement('beforebegin', submitButton);
});

唯一的问题是 - track_ids 不匹配,用户脚本对此无能为力。

【讨论】:

    猜你喜欢
    • 2023-03-07
    • 1970-01-01
    • 2012-11-08
    • 2013-09-08
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多