[英]Automatically click on each tab in webbrowser and click on submit button
鑒於在瀏覽器中打開的一組網頁都來自同一個網站,每個網頁都有一個提交按鈕,是否可以依次向每個選項卡編寫 go 的內容並單擊提交按鈕?
我想知道是否可以使用用戶腳本管理器(如 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>
這是網站。 點擊Unlink打開一個新的 window 並查看表格(您需要一個帳戶):
其 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>
給定index.html
和 HTML 文件位於同一來源,名為other.html
與此 Z4C4AD5FCA2E03A3F74DBB1AACED
<button onclick="alert('other window button pushed')">Click me</button>
index.html 中的index.html
將打開另一個窗口/選項卡並單擊按鈕,該按鈕應打開警報。
const win = window.open('other.html', 'Other');
win.onload = () => {
const button = win.document.querySelector('button');
button.click();
}
無需在新選項卡中實際打開另一個form
即可提交表單。 Unlink和Submit forms 的區別在於后者有兩個新值: submit
設置為1
(即在表單提交時取消鏈接)和note
,用於解釋取消鏈接的注釋。
但是,由於發布了問題,您已將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_id
不匹配,用戶腳本對此無能為力。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.