2012-02-27 24 views
1

Pythonでサイトの高度な検索オプションを使用するプログラムを作成しています。具体的には、検索ページは the NVC advanced search pageです。私は検索するプロジェクトやバージョンの名前を知っているので、プログラムはドロップダウンリストからプロジェクト名とバージョン番号を選択し、結果ページを返すのが理想的です。Pythonを使用してWebページのAjax呼び出しからデータを返す

私はHTMLとJavascriptに全く慣れていません。私はPythonをかなり新しくしているので、これらのドロップダウンメニューをPython経由で「クリック」して結果を返す方法があるかどうかはわかりません。 JavascriptがAjax呼び出しを行うという事実は、ページのソースをロードしてプロジェクト名とバージョンのリストを解析するだけでは済まないので、状況をさらに複雑にします。

Python/Javascript/Ajaxで誰かが正しい方向に私を送ることができますか?

このプログラムの使用例は、プロジェクト「glibc」とそのバージョン番号「2.3.6」から始まります。プログラムは、この組み合わせがすべて保証されていることを確認します。 、その後(約13の結果を持っている)結果ページを返す。

+0

この質問は実際にここでかなり頻繁に聞かれています。 Pythonの答えは、@ GatorAlliが答えで述べたように、ほとんど常にMechanizeです。 – jdi

+0

ええ、私が質問をするとすぐに、私は、提案された関連する質問の1つが機械化について言及していることを見ました。しかし、私の場合、それは必要でないことが判明しました。私は将来もそれを心に留めておきます! –

答えて

0

人間のユーザがその検索ページを使用している場合、彼らは例えば、その後、別のページから製品のリストを読み込むされ、製品のリンクをクリックしてください:

http://web.nvd.nist.gov/view/vuln/cpe/cpe-chooser?index=0&component=Vendor

をこのページには、残念ながらではありませんJSONを使用しているので、レスポンスのカスタムJavaScript解析が行われます。この応答のデータは、ユーザーのドロップダウンとして表示されます。ユーザーが製品を選択すると、ブラウザーは正しいvalueを選択します。これにより、フォームがサブミットされると、それは照会の一部になります。例えば:この中

http://web.nvd.nist.gov/view/vuln/search-results?adv_search=true&cves=on&cpe_vendor=cpe%3A%2F%3Aa-a-s_application_access_server

cpe_vendor=cpe%3A%2F%3Aa-a-s_application_access_serverは重要な部分です。 =の前の部分がフィールド名で、後の部分が選択された値です(これは元々ajaxリクエストから来たものです)。面白い%3AビットはURLエンコーディングです。

検索するベンダーや製品の名前を知っているので、実際にページとやりとりする必要はありません。フィールド名(ベンダーの場合はcpe_vendor)と特定の製品/ベンダーの値(上記の例ではcpe:/:a-a-s_application_access_server)を検索してから、通常の検索URLを要求してください。

+0

私はこのアプローチを考えていましたが、残念ながら私はベンダーの名前、製品とバージョンのみを持っていませんでした。私はベンダーの名前を得るために私が見る唯一の方法は、製品が選択されたときに適切なベンダー名を選択するドロップダウンメニューを使用することだから、これは主に複雑なことだと思います。 –

+0

ベンダーは必須ではないので、とにかく物事を見つけることができるはずです。さもなければ私のポストの最初のものと同じ形をしているURLへのリクエストを行い、ベンダーリストのためにそれらを解析することができます。 – beerbajay

+0

ああ、そうです。そこで、製品名のために、http://web.nvd.nist.gov/view/vuln/cpe/cpe-chooser?index = 0&component = Product'(およびインデックス1〜9の他のページ)を検索します対応するベンダー名を取得します。おかげでビールバジャイ! –

1

Mechanize Pythonライブラリは、フォームの自動化に最適です。examples pageのフォームを編集して送信する方法の例があります。

0

高度な検索オプションページはGET経由で結果ページにオプションを送信し、URLを指定します(より細かく改行します):

http://web.nvd.nist.gov/view/vuln/search-results? 
adv_search=true& 
cves=on& 
cve_id=& 
query=& 
cwe_id=& 
cpe_vendor=cpe%3A%2F%3Aian_bezanson& 
cpe_product=cpe%3A%2Fa%3Aian_bezanson%3Adropbox& 
cpe_version=cpe%3A%2Fa%3Aian_bezanson%3Adropbox%3A0.0.3_beta& 
pub_date_start_month=0& 
pub_date_start_year=2005& 
pub_date_end_month=2& 
pub_date_end_year=2009& 
mod_date_start_month=2& 
mod_date_start_year=2007& 
mod_date_end_month=9& 
mod_date_end_year=2009& 
cvss_sev_base=&cvss_av=& 
cvss_ac=& 
cvss_au=& 
cvss_c=& 
cvss_i=& 
cvss_a= 

URLのどのビットがフォームのどの情報なのか分かりませんが、それで結果ページを削ってしまわなければなりません。

関連する問題