2017-12-25 35 views
0

아래 코드는 phantomJS 인스턴스에 대해 사용자 에이전트를 설정하고 인쇄 한 다음 다시 결정하는 웹 사이트를 긁습니다. 결과는 다릅니다. 어떻게 이럴 수있어? 나는 아직까지 this 명백한 해결책을 재현 할 수 없었다.어떻게 파이썬에서 PhantomJS를 사용하여 두 개의 다른 사용자 에이전트를 동시에 사용할 수 있습니까?

1) 설정 ONE 사용자 에이전트

serviceDefaults=["--ignore-ssl-errors=yes",] 
desiredDefaults={ 
      "phantomjs.page.settings.userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) 
      AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"} 

2) 설정 드라이버와 인쇄 사용자 에이전트

def create_phantomJS(): 
    driver = webdriver.PhantomJS("phantomjs.exe", desired_capabilities=desiredDefaults, service_args=serviceDefaults) 
    phantom_exc_uri='/session/$sessionId/phantom/execute' 
    driver.command_executor._commands['executePhantomScript'] = ('POST', phantom_exc_uri) 
    initScript="""    
    this.onInitialized=function() { 
     var page=this; 
     if (page.navigator == page.settings.userAgent){return}; 
     page.settings.navigator = page.settings.userAgent; 
    } 
    """ 
    driver.execute('executePhantomScript',{'script': initScript, 'args': []}) 
    agent = driver.execute_script("return navigator.userAgent") 
    print "rawUa:", agent 
    return driver 

3) 사용자 에이전트를 확인하고 인쇄 할 긁어 웹 사이트 그것을

def use_driver(driver, URL): 
    website = driver.get(URL) 
    html = WebDriverWait(driver, 1).until(EC.presence_of_element_located((By.ID, "rawUa"))) 
    return text 

4) 비교 결과

driver = create_phantomJS() 
text = use_driver(driver, URL) 
print text 

출력은 두 개의 다른 사용 도구입니다.

rawUa: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1 
rawUa: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36 

어떻게 파이썬에서이 시나리오에서 사용자 에이전트와 일치 하는가?

답변

1

initScrip 개선이 효과가있을 수 있습니다.

initScript=""" 
this.onInitialized=function() { 
console.log("[INFO] TESTING NAVIGATOR VALUE"); 
if (navigator.userAgent == this.settings.userAgent){return}; 
navigator={"User-Agent":this.settings.userAgent}; 
}.bind(this); 
""" 

탐색기를 새 개체로 설정해야합니다. 페이지 작성 후 URL 요청 이전에 onInitialized 핸들러가 호출되기 때문에 드라이버 작성 직후의 인쇄는 적절한 테스트 결과를 제공하지 않습니다.

+0

은 매력처럼 작동합니다. 솔직히 - 많은 감사합니다. – sudonym