2016-09-14 8 views
7

के माध्यम से Google क्रोम को नियंत्रित करना मैं उपयोगकर्ता द्वारा प्रदान किए गए एक विशिष्ट यूआरएल में बदलावों की जांच करने का एक तरीका ढूंढ रहा था। मैंने एक स्क्रिप्ट लिखी है कि मैं घर पर दौड़ गया जो सफलतापूर्वक WWW::Mechanize का उपयोग कर कर सकता है। बात यह है कि, मुझे इसे किसी अन्य कंप्यूटर नेटवर्क में चलाने की ज़रूरत है जिसमें एक समूह नीति है जो सभी $mech->get($url) अनुरोधों को अवरोधित करती है (यह फ़ायरवॉल की समस्या नहीं है, मैंने पर्ल को छोड़ दिया है), इसलिए मैंने सोचा कि मैं इस समस्या को पर्ल देकर कोशिश करूँगा वेब ब्राउज़र को नियंत्रित करें।पर्ल स्क्रिप्ट

नेटवर्क में कंप्यूटर केवल Google क्रोम और आईई 8 चलाते हैं और मैं किसी अन्य नीति के कारण फ़ायरफ़ॉक्स इंस्टॉल नहीं कर सकता (WWW::Mechanize::Firefox का उपयोग करने का विचार)। मैं स्क्रिप्ट में आईई 8 का आह्वान नहीं करना चाहता क्योंकि अधिकांश यूआरएल जो उपलब्ध कराए जाएंगे वे उन वेबसाइटों के होंगे जो इसके साथ अच्छी तरह से काम नहीं करते हैं, जिससे मुझे केवल क्रोम के साथ छोड़ दिया जाता है।

जो एक WebSocket कनेक्शन के माध्यम से क्रोम एक्सटेंशन API के सभी को उजागर करता है:

एक मॉड्यूल है कि ऐसा कर सकते हैं के लिए खोज, मैं केवल AnyEvent::Chromi पाया।

यह काम नहीं करता है (नीति शायद वेबसाकेट को भी अवरुद्ध करती है)।

क्या इस समस्या के आसपास काम करने का एक और तरीका है/एक पर्ल स्क्रिप्ट के भीतर क्रोम को नियंत्रित करें?

+0

सेलेनियम है। Https://metacpan.org/pod/ सेलेनियम :: क्रोम देखें। लेकिन मेरा मानना ​​है कि आपको कुछ स्थापित करने की भी आवश्यकता है। पर्ल शायद सही उपकरण नहीं हो सकता है। – simbabque

+0

@ सिंबैबिक मैंने इसके बारे में भी सोचा, लेकिन मुझे पर्ल में ऐसा करने के लिए कहा गया। पता नहीं क्यों। अब मैं और अधिक उत्सुक हूं कि इसे करने का पर्ल तरीका क्या है। – yonyon100

+0

@ yonyon100 मुझे लगता है कि यह कार्य करने के लिए कहा जाने वाला बहुत अजीब बात है लेकिन इसे करने के लिए आईटी समर्थन नहीं है: मुझे एक समान समस्या थी (लेकिन कंपनी लैपटॉप में 'व्यक्तिगत') और मैंने इसे हल किया 'स्टैंडअलोन पायथन' + सेलेनियम। समस्याओं के बिना क्रोम कमांड करना संभव था। एक अन्य संभावना PowerShell + IE8 का भी उपयोग कर सकती है, कुछ अंतर्निहित स्वचालन है जो आपको उपयोगी मिल सकता है। – eballes

उत्तर

1

चूंकि आपने IE8 का उल्लेख किया है, इसलिए मुझे लगता है कि आप विंडोज सिस्टम से निपट रहे हैं। और चूंकि आपने उल्लेख किया है कि आपने WWW: मैकेनिक्स :: फ़ायरफ़ॉक्स पर विचार किया था, ऐसा लगता है कि आप केवल कोर मॉड्यूल तक ही सीमित नहीं हैं।

उस पर आधारित, क्रोम ब्रॉसर को स्वचालित करने के लिए मैं सोच सकता हूं कि एकमात्र तरीका क्रोम ब्राउज़र को नियंत्रित करने के लिए Win32::GuiTest का उपयोग करना होगा। यदि आप केवल कीबोर्ड इनपुट (यानी कोई माउस नहीं) का उपयोग करके अपने परीक्षण को मैन्युअल रूप से ड्राइव करने के तरीके को समझ सकते हैं, जिससे कर्सर को विभिन्न कार्यों के लिए सही स्थिति में लाने के लिए माउस इम्यूलेशन को समझने की कोशिश करने से चीजों को आसान बना दिया जाएगा।

मुझे यकीन नहीं है कि यह आवश्यक रूप से एक मार्ग है जिसका आप उपयोग करना चाहते हैं या नहीं। यह केवल एकमात्र तरीका है जिसे मैं पूरा करने के बारे में सोच सकता हूं कि आप उन प्रतिबंधों के साथ क्या करना चाहते हैं जिन्हें आप सौदा करना चाहते हैं।

+0

जाहिर है, मैं इसे भी इंस्टॉल नहीं कर सकता। ऐसा लगता है कि पुराने नेटडमिन ने कुछ कारणों से 'डब्ल्यूडब्ल्यूडब्लू :: मैकेनाइज :: फ़ायरफ़ॉक्स' स्थापित किया है, लेकिन नया मुझे नए मॉड्यूल स्थापित करने की अनुमति नहीं देता है ... लेकिन मुझे इस मॉड्यूल को पेश करने के लिए धन्यवाद! – yonyon100

1

आप इसे किसी भी सीपीएएन मॉड्यूल के बिना स्क्रैच से भी कर सकते हैं। मैंने यूनिक्स डोमेन (यूडी) सॉकेट का उपयोग करके लिनक्स (उबंटू 16.04, Google क्रोम संस्करण 53) पर इसका परीक्षण किया। दुर्भाग्यवश, ऐसा लगता है कि विंडोज़ में यूडी सॉकेट नहीं हैं, लेकिन नामित पाइप का उपयोग कर विंडोज से ऐसा करना संभव होना चाहिए।

सबसे पहले, सुनिश्चित करें कि पृष्ठभूमि में google-chrome चल रहा है। हम को Chrome App बनाने की आवश्यकता होगी जो को native messaging API के माध्यम से मूल होस्ट के साथ संवाद करेगा। देशी होस्ट कोई भी स्क्रिप्ट हो सकता है जो STDIN और से संदेशों को पढ़ता है STDOUT के माध्यम से जवाब देता है। मैंने एक पायथन स्क्रिप्ट और एक पर्ल स्क्रिप्ट दोनों का परीक्षण किया।

अब, एक स्टैंडअलोन पर्ल स्क्रिप्ट के लिए क्रोम ब्राउज़र के साथ संवाद करने के लिए, यह एक यूडी सॉकेट ( मूल होस्ट द्वारा बनाया गया) मूल होस्ट में अनुरोध भेज देगा; मूल होस्ट अपने मानक आउटपुट पाइप के माध्यम से google-chrome पर अनुरोध को आगे बढ़ाएगा। फिर क्रोम ऐप (जावास्क्रिप्ट में लिखा गया) अनुरोध प्राप्त होगा।क्रोम ऐप अनुरोधित डेटा प्राप्त करने के लिए क्रोम जावास्क्रिप्ट एपीआई का उपयोग करेगा और इसे मूल होस्ट पर वापस कर देगा। अंत में, देशी होस्ट सॉकेट के माध्यम से पर्ल स्क्रिप्ट के परिणाम को आगे बढ़ाता है।

जैसा कि आप देख सकते हैं, इसे स्थापित करने के लिए कुछ विवरण आवश्यक हैं, लेकिन मैं पुष्टि कर सकता हूं कि यह मेरे लिनक्स प्लेटफॉर्म पर काम करता है। अगर आपको विवरण की आवश्यकता है तो कृपया मुझे बताएं।

संबंधित मुद्दे