2013-02-05 1 views
24

HTTP 프록시를 통해 내 요청을 라우팅하는 방법을 파악하려고합니다.어떻게 파이썬 webdriver에서 phantomjs/ghostdriver 용 프록시를 설정합니까?

나는이 같은 webdriver 초기화 해요 : 나는 문서와 소스를 통해 갔어요 및 webdriver을위한 phantomjs와 프록시 서버를 사용하는 방법을 찾을 수 없습니다

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

.

제안 사항?

답변

6

나는 약간 파고 그 기능이 있다는 것을 알았지 만 노출되지 않았습니다. 그래서 그것을 패치하기위한 편리한 원숭이 렌치가 필요합니다. 이 기능이 webdriver 호출에서 완전히 노출되기 전까지는 저에게 맞는 해결책이 있습니다.

EDIT : 이제 service_args가 노출 된 것처럼 보이지만 더 이상 원숭이 패치를 사용하여 프록시를 사용하지 않아도됩니다. @ alex-czech 대답 사용법을 참조하십시오.

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 프록시 - 인증 헤더로 & 모두에서 자격 증명을 전달 할 필요가 끝났다. 나는 phantomjs가 프록시 인증을 올바르게 전달하지 않는다고 믿는다. 내가 처음 인증-매개 변수는 프록시 헤더로 전달되지 않도록 짐작 것, 그래서 당신은 수동으로 모두를 할 필요가

http://username:[email protected]:port로 프록시의 구조가 정의

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") 

.