您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Fetches the current number of viewable hits on mturk.
- // ==UserScript==
- // @name Fetch Total Number of Viewable Hits
- // @author StubbornlyDesigned
- // @description Fetches the current number of viewable hits on mturk.
- // @namespace https://greasyfork.org/en/users/35961-stubbornlydesigned
- // @version 1.1
- // @match https://www.mturk.com/mturk/findhits?match=false*
- // @grant none
- // ==/UserScript==
- (function () {
- var total = 0,
- totalPages = 0,
- hitsUrl = 'https://www.mturk.com/mturk/findhits?match=false&pageSize=100',
- currentUrl = '';
- function parse(data) {
- if(!data.querySelector('td[class="error_title"]')) {
- var available = data.querySelectorAll('a[id^="number_of_hits"]');
- totalPages = data.forms.hitGroupsForm.querySelector('td:nth-of-type(3) span:first-of-type a:last-of-type').search.match(/pageNumber=(\d+)/)[1];
- if(available.length) {
- [].slice.call(available).forEach(function(el) {
- total = (total + Number(el.parentElement.parentElement.lastElementChild.innerText.trim()));
- });
- var next = '';
- if(data.forms.hitGroupsForm.querySelector('td:nth-of-type(3) span:first-of-type').outerHTML.includes('Next')) {
- [].slice.call(data.forms.hitGroupsForm.querySelectorAll('td:nth-of-type(3) span:first-of-type a')).forEach(function(el) {
- if(el.innerText.includes('Next')) {
- next = el.href + '&pageSize=100';
- }
- });
- }
- if(next) {
- return next;
- } else {
- return 'completed';
- }
- }
- }
- throw new Error('You have exceeded the maximum number of page requests.');
- }
- function get(url) {
- return new Promise(function(resolve, reject) {
- var req = new XMLHttpRequest();
- req.open('GET', url);
- req.onload = function() {
- if (req.status == 200) {
- resolve(req.response);
- } else {
- reject(Error(req.statusText));
- }
- };
- req.responseType = 'document';
- req.onerror = function() {
- reject(Error("error"));
- };
- req.send();
- });
- }
- function run() {
- var url = !currentUrl ? hitsUrl : currentUrl;
- get(url)
- .then(function(res) {
- var nextMove = parse(res);
- var currentPage = url.match(/pageNumber=(\d+)/) ? url.match(/pageNumber=(\d+)/)[1] : 1;
- document.getElementById('totalAvailableHits').innerText = currentPage + ' / ' + totalPages;
- if(nextMove) {
- if(nextMove.includes('mturk')) {
- currentUrl = nextMove;
- setTimeout(function() {run();}, 200);
- } else if(nextMove == 'completed') {
- document.getElementById('totalAvailableHits').innerText = total;
- total = 0;
- totalPages = '';
- currentUrl = '';
- }
- }
- })
- .catch(function(err) {
- console.log(err);
- setTimeout(function() {run();}, 1000);
- });
- }
- function init() {
- var el = document.getElementById('user_name_field');
- el.setAttribute('id', 'totalAvailableHits');
- el.innerText = 'Fetch Total Available Hits';
- el.style.cursor = 'pointer';
- el.addEventListener('click', function() {run();});
- }
- init();
- })();