2013-02-05 5 views
24

मैं यह समझने की कोशिश कर रहा हूं कि HTTP प्रॉक्सी के माध्यम से मेरे अनुरोधों को कैसे रूट किया जाए।मैं अजगर वेबड्राइवर में phantomjs/ghostdriver के लिए प्रॉक्सी कैसे सेट करूं?

मैं इस तरह webdriver आरंभ कर रहा हूँ:

user_agent = 'my user agent 1.0' 
DesiredCapabilities.PHANTOMJS['phantomjs.page.settings.userAgent'] = user_agent 
driver = webdriver.PhantomJS() 

मैं डॉक्स और स्रोत के माध्यम से चले गए हैं और webdriver के माध्यम से के लिए phantomjs के साथ एक प्रॉक्सी सर्वर का उपयोग के लिए एक रास्ता खोजने के लिए प्रतीत नहीं कर सकते हैं।

कोई सुझाव?

उत्तर

6

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

संपादित करें: ऐसा लगता है कि सेवा_आर्ग अब सामने आए हैं, अब आपको प्रॉक्सी का उपयोग करने के लिए बंदर पैच सेलेनियम की आवश्यकता नहीं है ... उपयोग करने के लिए @ एलेक्स-चेक उत्तर देखें।

from selenium import webdriver 
from selenium.webdriver.phantomjs.service import Service as PhantomJSService 

phantomjs_path = '/usr/lib/node_modules/phantomjs/lib/phantom/bin/phantomjs' 
# monkey patch Service temporarily to include desired args 
class NewService(PhantomJSService): 
    def __init__(self, *args, **kwargs): 
     service_args = kwargs.setdefault('service_args', []) 
     service_args += [ 
      '--proxy=localhost:8080', 
      '--proxy-type=http', 
     ] 
     super(NewService, self).__init__(*args, **kwargs) 
webdriver.phantomjs.webdriver.Service = NewService 
# init the webdriver 
self.driver = webdriver.PhantomJS(phantomjs_path) 
# undo monkey patch 
webdriver.phantomjs.webdriver.Service = PhantomJSService 

भी निम्नलिखित सेटिंग्स उपयोगी हैं, खासकर जब प्रॉक्सी का उपयोग करते समय लोड करने में बहुत लंबा समय लग सकता है।

max_wait = 60 
self.driver.set_window_size(1024, 768) 
self.driver.set_page_load_timeout(max_wait) 
self.driver.set_script_timeout(max_wait) 
0

मैं दोनों service_args & एक प्रॉक्सी प्रमाणीकरण हेडर के रूप में इन क्रेडेंशियल्स पारित करने के लिए की आवश्यकता होगी, समाप्त हो गया। मुझे विश्वास नहीं है कि फैंटोमज प्रॉक्सी ऑथ को सही तरीके से पास करता है।

service_args = [ 
    "--ignore-ssl-errors=true", 
    "--ssl-protocol=any", 
    "--proxy={}".format(proxy), 
    "--proxy-type=http", 
] 

caps = DesiredCapabilities.PHANTOMJS 

authentication_token = "Basic " + base64.b64encode(b'{}:{}'.format(username, password)) 

caps['phantomjs.page.customHeaders.Proxy-Authorization'] = authentication_token 

self.driver = webdriver.PhantomJS(
     service_args=service_args, 
     desired_capabilities=caps, 
     executable_path="./phantomjs-2.1.1-linux-x86_64/bin/phantomjs") 

कहाँ प्रॉक्सी के संरचना के रूप में http://username:[email protected]:port

मैं एक अनुमान है कि पहले Auth-मानकों प्रॉक्सी के लिए एक हेडर के रूप में पारित नहीं कर रहे हैं खतरे चाहते हैं, ताकि आप दोनों मैनुअल रूप से करना परिभाषित किया गया है।

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