2017-10-10 36 views
8

मैं अजगर में एक विधि खोजने के लिए संघर्ष कर रहा हूं जो आपको वर्तमान में उपयोग किए गए वेब ब्राउज़र में डेटा पढ़ने की अनुमति देता है। प्रभावी रूप से, मैं स्थानीय रूप से नियंत्रित कंपनी वेबपृष्ठ पर डेटा के बड़े पैमाने पर डेटाफ्रेम डाउनलोड करने और इसे डेटाफ्रेम में लागू करने का प्रयास कर रहा हूं। मुद्दा यह है कि वेबसाइट पर काफी जटिल प्रमाणीकरण टोकन प्रक्रिया है जो मैं कई प्रकार के वेब पैरामीटर, अनुरोध, urllib, और cookielib का उपयोग कर कई प्रकार के उपयोगकर्ता पैरामीटर का उपयोग कर सेलेनियम का उपयोग करके बाईपास करने में सक्षम नहीं हूं। मैंने इस मोर्चे पर पूरी तरह से छोड़ दिया है क्योंकि मैं लगभग सकारात्मक हूं कि प्रमाणीकरण प्रक्रिया के लिए इन पुस्तकालयों के साथ आसानी से हासिल किया जा सकता है।पायथन - वर्तमान ब्राउज़र से ब्राउज़र को मैनिपुलेट और पढ़ें

हालांकि, मैंने आवश्यक टोकननाइज़ेशन प्रक्रिया को बाईपास करने का प्रबंधन किया जब मैंने तुरंत एक मौजूदा ब्राउज़र में एक नया टैब खोलने का परीक्षण किया जो WebBrowser का उपयोग कर पहले से लॉग इन था। क्लासिकल रूप से, वेब ब्रोसर एक पठन फ़ंक्शन प्रदान नहीं करता है जिसका अर्थ यह है कि पृष्ठ को खोला जा सकता है, भले ही पृष्ठ पर डेटा को पांडा डेटाफ्रेम में पढ़ा नहीं जा सके। यह मुझे सोच रहा था कि मैं Win32com का उपयोग कर सकता हूं, ब्राउज़र खोल सकता हूं, लॉगिन कर सकता हूं, फिर बाकी स्क्रिप्ट चला सकता हूं, लेकिन फिर, इंटरनेट एक्सप्लोरर के लिए प्रेषण की कोई सामान्य पढ़ने की क्षमता नहीं है जिसका अर्थ है कि मैं वह जानकारी नहीं भेज सकता जिसे मैं पांडा करना चाहता हूं । मैं उलझन में हूं। कोई विचार?

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

अद्यतन: मुझे कंपनी से प्रमाणीकरण टोकन प्राप्त हुए हैं, हालांकि इसे किसी अन्य सर्वर पर एक पायथन पैकेज का उपयोग करने की आवश्यकता है, मेरे पास पहुंच भी नहीं है, अधिकतर क्योंकि यह एक विचित्रता है कि मैं अपने विभाग में पायथन का उपयोग कर रहा हूं। इस प्रकार उपरोक्त अभी भी लागू होता है - एक खुले ब्राउज़र को पढ़ने और छेड़छाड़ करने के लिए एक विधि की आवश्यकता है।

+0

सेलेनियम आपके डेस्कटॉप पर मौजूदा ब्राउज़र विंडो के साथ काम कर सकता है, तो आप इसे एक और प्रयास दे सकते हैं। – georgexsh

+0

https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/18 – WolVes

+0

यदि मैं उपर्युक्त अधिकार को समझता हूं, तो उपरोक्त वांछित कार्यक्षमता का निर्णय कभी भी शामिल नहीं किया गया था। टिप्पणियों में इस मुद्दे के कुछ समाधान हैं, लेकिन वे सभी अन्य प्रोग्रामिंग भाषाओं में हैं। – WolVes

उत्तर

8

चरण-दर-चरण

1) सेलेनियम के साथ ब्राउज़र की शुरुआत करें।

2) स्क्रिप्ट कुछ तत्व यह है कि आपको सूचित है कि आप की आवश्यकता हो गया पेज और में लॉग इन के लिए इंतज़ार कर शुरू कर देना चाहिए।

3) आप मैन्युअल रूप से पेज के लिए लॉग इन करने के लिए इस नई ब्राउज़र विंडो का उपयोग कर सकते हैं।

4) स्क्रिप्ट पता लगाता है कि आप आवश्यक पृष्ठ पर हैं और में लॉग इन किया।

5) स्क्रिप्ट को अपनी इच्छानुसार प्रक्रियाओं पेज।

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

# start webdriver (opens Chrome in new window) 
chrome = webdriver.Chrome() 

# initialize waiter with maximum 300 seconds to wait. 
waiter = WebDriverWait(chrome , 300) 

# Will wait for appear of #logout element. 
# I assume it shows that you are logged in. 
wait.until(EC.presence_of_element_located(By.ID, "logout")) 

# Extract data etc. 

यदि आप अपने क्रोम उपयोगकर्ता की प्रोफाइल का उपयोग करते हैं तो यह आसान हो सकता है। इस तरह से आपके पास पिछले सत्र जारी रहेगा, इसलिए आपको कोई लॉगिन क्रिया करने की आवश्यकता नहीं होगी।

options = webdriver.ChromeOptions() 
options.add_argument("user-data-dir=FULL_PATH__TO_PROFILE") 
chrome = webdriver.Chrome(chrome_options=options) 
chrome.get("https://your_page_here") 
+0

यदि संभव हो तो कृपया मेरी अंग्रेजी को ठीक करें। –

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