2016-09-07 23 views
5

URLを開こうとするPhantomjsスクリプトがあります。Phantomjsがブラウザで開くページを開くことができません。

Unable to load resource (request ID:undefinedURL:http://foo.bar/tree/nav_value/27) 
Error code: 203. Description: Error downloading http://foo.bar/tree/nav_value/27 - server replied: Not Found 

をしかし、私はChromeブラウザでURL http://foo.bar/tree/nav_value/27を開いたときに、全く問題ありませんし、ページが正しくセットされている:phantomjsはこのエラーを返します!

これはスクリプトです:

// Read the Phantom webpage '#intro' element text using jQuery and "includeJs" 

"use strict"; 
var page = require('webpage').create(); 
var system = require('system'); 

if (system.args.length != 2) { 
    console.log("please pass 2 argument") 
} 
var company_id = system.args[1] 
console.log("c", company_id) 

page.onConsoleMessage = function(msg) { 
    console.log("message", msg); 
}; 

page.onResourceError = function(resourceError) { 
    console.log('Unable to load resource (request ID:' + resourceError.id + 'URL:' + resourceError.url + ')'); 
    console.log('Error code: ' + resourceError.errorCode + '. Description: ' + resourceError.errorString); 

}; 

page.onError = function(msg, trace) { 
    console.log("error", msg) 
} 

var nav_value; 

page.open("http://foo.bar/tree/nav_value/27", 'post', 'username=navid&password=test', function(status) { 
    if (status === "success") { 
     page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() { 
      page.evaluate(function() { 
       nav_value = parseInt($("#value").text()); 
      }); 
      phantom.exit(0); 
     }); 
    } else { 
     phantom.exit(1); 
    } 
}); 

EDIT:奇数が起こる

何か。別のマシン上のウィンドウでこのコードをphantomjsで実行すると、そのコードは機能します。しかし、Ubuntuではエラーを返します!

phantomjが開こうとしているURLは、同じサーバー上にあります。 (Ubuntu)

問題は何ですか?

+1

「ChromeでURLを開くと、ChromeでGETリクエストを行いますか? PhantomJSでPOSTリクエストを行うことに注意してください。 – Vaviloff

+0

はい私はGET要求をします。違いはありますか? – Navid777

+0

サイトに応じて作成できます。実験のためにPhantomJSのGETリクエストで同じページをリクエストしてみてください。ページが見つからない場合は...スクリプトにタイプミスがありますか?残念ながら、サイトのURLを表示することはできません。なぜこのエラーが発生するのかについて、他のいくつかの理論があります。 – Vaviloff

答えて

1

これは役に立ちますが、過去にPhantomJSの問題を突き止めるのに役立ついくつかのアイデアがあります。

まず、別のマシンで動作するとしたら、other versions of PhantomJSをテストするには、実行ファイルをダウンロードし、Pythonスクリプトのパスを指定します。バージョン1.9.8は、過去のいくつかのセキュリティ制限をバイパスするのに役立ちました(興味がある場合に備えていくつかの設定を残しました)。

driver = webdriver.PhantomJS(
    executable_path='/path/to/the/downloaded/phantomjs19', 
    # you can specify args, such as: 
    service_args=[ 
     '--ignore-ssl-errors=true', 
     '--ssl-protocol=any', 
     '--web-security=false', 
    ], 
    # and also other capabilities: 
    desired_capabilities={ 
     'phantomjs.page.settings.resourceTimeout': '5000', 
     'phantomjs.page.settings.userAgent': (
      "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/53 " 
      "(KHTML, like Gecko) Chrome/15.0.87" 
     ), 
    }, 
) 

また、Seleniumのアップグレードが役立つかどうかを確認することもできます。

pip install selenium --upgrade 

何が起こっているのかを理解するのに役立つもう1つのアイデアは、エラーが発生する前にスクリーンショットを印刷し、ページソースを記録しようとすることです。あなたは次のようにすることができます:

# Set the window size to something appropriate for your tests. 
driver.set_window_size(900, 800) 
driver.save_screenshot('screen.png') 

# Check if the page source matches your expectations. 
with open('temp.html', 'w') as f: 
    f.write(driver.page_source) 

どうすればいいですか?

関連する問題