2011-06-23 13 views
1

まず、私はdreamhost.comから特定のドメインの購入を自動化するためのpythonスクリプトを書いています。私はまず、ウェブサイトのパネルにアクセスして、ユーザーがサイトで提供するものを何でもできるようにします。コードは次のとおりです。pythonのmechanizeモジュールのテキスト入力への書き込みに関する問題

br = mechanize.Browser() 
br.open("https://panel.dreamhost.com/index.cgi?tree=domain.registration&") 
br.select_form(name="a") 
br["username"]="my_username_here" 
br["password"]="my_password_here" 
br.submit() 

このコードワードは完全に一致し、パネルに記録されます。ここにはドメインを入力するテキストボックスと拡張機能を選択する複数選択があります。このフォームが送信されると、利用可能かどうかが確認されます。

私は上記の成功にも同様のアプローチを取ると、次の操作を実行

br.select_form(name="f") 
br["Pick Domain Name"] = "domainiwanttobuy" #textbox 
br["tld"] = [extension list]     #select from dropdown 
br.submit() 

このフォームが送信された後、結果のHTMLは、ドロップダウンが適切に変化することを示しているが、テキストフィールドが空白で、私を得ますdreamhostのエラー:「エラー:上記のドメイン名を入力してください。」

ので、入力フィールドが働いていない - 私は、対応するページのソースHTMLを見て、ここにある:すべての

<input name="fqdn" id="fqdn" class="text reg_domain_input" name="Pick Domain Name" value="mynewdomain" onChange="tradeMarkCheck(this.id)"> 

まず、それは2名の要素があることが疑わしいです。私はname = "fqdn"を使うことはできません。あるいは、そのようなコントロールが存在しないと言います。第二に、値が変わるとJavaScript関数が呼び出されることがわかります。私は機械化がJavascriptを処理できないことを知っていますが、関数が何か価値があるとは考えていません。だから、私はそれが問題を引き起こしているとは思わない。対応するjavascript関数は次のとおりです。

<script type="text/javascript"> 
function tradeMarkCheck(x) { 
    var domain = document.getElementById(x).value; 
    var bad = /(dream.*host|host.*dream)/; 

    if (bad.test(domain)) { 
     alert("NOTE: Domains containing 'DreamHost' in them are not eligible for use with DreamHost Rewards. Also, please ensure that your site/domain does not dilute or infringe upon the 'DreamHost' trademark (if you have any questions as to whether a use is legal or not, contact us at [email protected])."); 
    } 
} 
</script> 

これをデバッグして回避策を取っています。どんなアイデアでも大歓迎です。前もって感謝します!

答えて

1

私はサイトを見ていないが、私はいくつかのjavascriptがあなたが機械化していないことを強く行っていると強く疑う。このような場合の標準的な答えは、Selenium Webdriverを使用してブラウザを自動化することです(Python APIを使用しています)。

編集: Selenium WebdriverにはJavascriptを少しサポートするHtmlUnitヘッドレスブラウザがありますが、それは完全なJavaScriptサポートからは遠いです。 PhantomJSがあなたを助けることができるかもしれませんが、それはWebkitのヘッドレスバージョンです。

+0

唯一の問題は、プロセスをユーザーに表示させることができないことです。私が知っている限り、セレンの権利を持つユーザーからブラウザを隠す方法はありません。 –

+0

私はSeleniumと一緒に行きました.Pythonのドキュメントは恐ろしいものでしたが、構文を理解すればすべて正常に動作しました。ご協力いただきありがとうございます。 –

関連する問題