2017-12-25 13 views
0

以下のコードでは、ユーザーエージェントをphantomJSインスタンスに設定し、印刷してから再度決定するWebサイトをスクラップします。結果は異なります。どうすればいいの?私はまだ明らかな解をthis再現できませんでした。私はPythonでPhantomJSと同時に2つの異なるユーザエージェントを持っていますか?

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 

出力には2つの異なるユーザーエージェントがあります。 pythonでこのシナリオでユーザーエージェントを一致させる方法

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

ナビゲータを新しいオブジェクトに設定する必要があります。ドライバの作成直後の印刷では、onInitializedハンドラがページの作成後およびURL要求の前に呼び出されるため、適切なテスト結果が得られません。

+0

魅力的な作品です – sudonym

関連する問題