javascript - क्रोम में Greasemonkey/usercript का उपयोग कर पृष्ठ पर एक बटन को क्लिक करना




javascript-events automation (2)

मैं यहां बिल्कुल यथासंभव वर्बोज़ बनने जा रहा हूं, क्योंकि मैंने कुछ ऐसे समाधानों में भाग लिया है जो बिना पॅनिंग को खत्म नहीं कर पाए हैं। कृपया ध्यान रखें कि मुझे जावास्क्रिप्ट नहीं पता है । मुझे मूल HTML और सीएसएस पता है मेरे पास कोई वास्तविक प्रोग्रामिंग पृष्ठभूमि नहीं है लेकिन मैं इस तरह से बुनियादी कार्यों की खोज करके थोड़ा सा सीखने की कोशिश कर रहा हूं। कृपया मुझसे बात करो जैसे मैं बेवकूफ हूँ इस विशिष्ट मुद्दे पर शोध करते समय मैंने इस पोस्ट में कोई भी भाषा फेंक दी थी। मैं यह यूज़रस्क्रिप्ट एक निजी परियोजना के रूप में लिख रहा हूं और कुछ दोस्तों के साथ साझा करने के लिए।

मैं क्या करने की कोशिश कर रहा हूँ

मैं Chrome / Greasemonkey के लिए यूज़रस्क्रिप्ट लिखने की कोशिश कर रहा हूं (क्रोम मेरा लक्ष्य ब्राउज़र है) जो कि युद्धक्षेत्र 3 सर्वर ब्राउज़र पर ताज़ा करें बटन क्लिक करेगी आप में से जो लोग नहीं जानते हैं, 3 युद्धक्षेत्र वीओआइपी के लिए एक ब्राउज़र प्लगइन के साथ बनाई गई एक वेब साइट का उपयोग करता है और वास्तव में एक सर्वर ब्राउज़र के जरिए गेम लॉन्च करता है इसके बड़े हिस्से काफी हद तक सीधे तालिका में एचटीएमएल की व्यवस्था करते हैं।

यह विचार यह है कि जब एक सर्वर के लिए मुख्य पृष्ठ को पूरा किया जाए, तो स्क्रिप्ट प्रत्येक तीन सेकंड या फिर ताज़ा करें बटन पर क्लिक करेगी जब तक कि पेज सर्वर पर एक खुले स्थान की रिपोर्ट न करे, फिर ताज़ा पाश को रोकें और सर्वर में शामिल होने के बटन पर क्लिक करे । मुझे पहले से ही चल रहे स्क्रिप्ट का हिस्सा मिल गया है, जो कि सर्वर वर्तमान और अधिकतम खिलाड़ियों के चुनाव करता है, तब उन्हें अपने स्वयं के चर पर असाइन किया जाता है।

इस समय मैं कंसोल में काम करने के लिए एक क्लिक प्राप्त करने की कोशिश कर रहा हूं, इसलिए मैं वास्तव में इसे अपनी पटकथा में कुछ उपयोग के लिए रख सकता हूं और शून्य भाग्य प्राप्त कर रहा हूं।

कोड को हेरफेर करने की कोशिश कर रहा हूं।

यह क्रोम देव टूल से खींचने के लिए मैं उस बटन को क्लिक करने की कोशिश कर रहा हूं:

<div class="serverguide-header-refresh-button alternate show"> 
<div type="reset" class="common-button-medium-grey">
<p style="position: relative;">
<a href="/bf3/servers/show/c7088bdc-2806-4758-bf93-2106792b34d8/">Refresh </a>
</p>
</div>
</div>

(यह लिंक स्थिर नहीं है। यह एक विशिष्ट सर्वर पृष्ठ का लिंक है)

मैंने क्या कोशिश की है

वास्तव में बटन का पता लगाने के लिए मैं getElementsByClassName का उपयोग कर रहा हूँ इसमें एक अनूठी पहचान नहीं है लेकिन इस विशिष्ट पृष्ठ पर वह वर्ग अद्वितीय है, इसलिए getElementsByClassName("serverguide-header-refresh-button")[0] हर बार उचित getElementsByClassName("serverguide-header-refresh-button")[0] खींच रहा है यह समस्या है कि बटन पर किसी भी वास्तविक कार्रवाई करने के लिए स्क्रिप्ट हो रही है।

document.getElementsByClassName("serverguide-header-refresh-button")[0].click();

अब मुझे पता है कि यह काम नहीं करता क्योंकि यह एक पारंपरिक सबमिट बटन नहीं है। मैं यहां मानक की विशेषताओं को नहीं समझता लेकिन मुझे लगता है कि यह .click() विधि का समर्थन नहीं करता है।

function addJQuery(callback) {
  var script = document.createElement("script");
  script.setAttribute("src", "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js");
  script.addEventListener('load', function() {
    var script = document.createElement("script");
    script.textContent = "(" + callback.toString() + ")();";
    document.body.appendChild(script);
  }, false);
  document.body.appendChild(script);
}

// the guts of this userscript
function main() {
  unsafeWindow.jQuery('.serverguide-header-refresh-button')[0].click();
}

// load jQuery and execute the main function
addJQuery(main);

यह बस unsafeWindow.jQuery('.serverguide-header-refresh-button').click(); कुछ लिपटे में लिपटे के लिए jQuery के उपयोगकर्ताओं के लिए jQuery लोड करने के लिए कोड। यह थोड़ा सा था जो मैंने कहीं और उठाया था लेकिन कहा गया कि यह केवल काम करेगा अगर jQuery पेज पर लोड किया गया था। मुझे लगा कि यह एक कोशिश के लायक था ये उन में से एक है जो मुझे नहीं पता कि मैं क्या अंधेरे में शॉट कर रहा हूं और यह काम नहीं करता। मैंने नीचे दिए गए एक ही चीज़ jQuery कोड के दूसरे स्निपेट के साथ की, जिसे मैंने उठाया:

function addJQuery(callback) {
  var script = document.createElement("script");
  script.setAttribute("src", "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js");
  script.addEventListener('load', function() {
    var script = document.createElement("script");
    script.textContent = "(" + callback.toString() + ")();";
    document.body.appendChild(script);
  }, false);
  document.body.appendChild(script);
}

// the guts of this userscript
function main() {
   var evObj = document.createEvent('Events');
      evObj.initEvent("click", true, false);
      document.getElementsByClassName('serverguide-header-refresh-button')[0].dispatchEvent(evObj);
}

    // load jQuery and execute the main function
addJQuery(main);

क्रोम और फायरबग कंसोल में इन दोनों वापसी अपरिभाषित हैं

तो, क्या इस पृष्ठ पर रिफ्रेश बटन दबाकर इस स्क्रिप्ट के लिए थोड़ी सी कोड बनाने में मेरी मदद करने के लिए कोई बहुत दयालु होगा?


इसलिए, आप सही रास्ते पर हैं, लेकिन आप A टैग को हथियाने नहीं रखते हैं, A टैग नहीं। "बटन" (इस मामले में लिंक) पर क्लिक करने के लिए, आपको वास्तविक लिंक पर क्लिक करना होगा क्योंकि यह DIV में निहित तत्वों के लिए सुरंग नहीं होगा।

document.querySelector('serverguide-header-refresh-button a')

आपको क्लिक करने के लिए A तत्व मिलना चाहिए JQuery से $('serverguide-header-refresh-button a').click(); कार्य करना चाहिए।


ध्यान दें:

  1. jQuery। .click() पहली जगह में jQuery के माध्यम से सेट नहीं किए गए क्लिक ईवेंट पर मज़बूती से काम नहीं करता है

  2. आपको सही प्रकार की घटना बनाने की आवश्यकता है; createEvent('Events') तरीका नहीं है

  3. जैसा जिम डिविल ने बताया, लिंक छद्म बटन का चयन नहीं किया जा रहा था।

  4. आपको इस (अब तक) के लिए jQuery की ज़रूरत नहीं है।

  5. सुनिश्चित करें कि प्रश्न में दिखाए अनुसार "ताज़ा करें" नियंत्रण स्थिर रूप से परीक्षण कोड के लिए लोड किया गया है। यदि यह AJAXed है, तो क्लिक करने का प्रयास बहुत जल्द हो सकता है

यह सब एक साथ रखकर, निम्नलिखित कोड को काम करना चाहिए । लेकिन सावधान रहें कि कुछ साइटें (जैसे कुछ Google ऐप्स) कायरता, राज्य-संवेदनशील डिज़ाइन का उपयोग करते हैं - जिनके लिए ईवेंट के अनुक्रम की आवश्यकता होती है

var refreshBtn = document.querySelector (
    "div.serverguide-header-refresh-button div[type='reset'] a"
);
var clickEvent = document.createEvent ('MouseEvents');
clickEvent.initEvent ('click', true, true);
refreshBtn.dispatchEvent (clickEvent);




userscripts