2017-12-15 13 views
6

Webアプリケーションで問題が発生しました。 は、ここに私のコードです:スクラップ​​テーブルの値がJavascriptからPythonに生成

@app.route('/addrec',methods = ['POST', 'GET']) 
def addrec(): 

    if g.user: 
     if request.method == 'POST': 

#UPPER PANE 

      payor = request.form['payor'] 


      receiptno = request.form['OR'] 
      paymentmethod = request.form['paymentmethod'] 
      naive_dt = time.strftime("%m/%d/%Y") 
      collectiondate = naive_dt = datetime.now() 
      message = request.form['message'] 
#LOWER PANE 
      url_to_scrape = 'http://localhost:5000/form' 
      r = requests.get(url_to_scrape) 
      soup = BeautifulSoup(r.text) 
      nature = [] 
      for table_row in soup.select("table.inmatesList tr"): 
       cells = table_row.findAll('td') 
       if len(cells) > 0: 
       nature = cells[0].text.strip() 
       natureamt = cells[1].text.strip() 
       nature = {'nature': nature, 'nature': natureamt} 
       nature_list.append(nature) 
      ent = Entry(receiptno, payor,officer, paymentmethod, collectiondate,message, nature_list) 
      add_entry(ent) 
      actions="Applied" 

      return redirect(url_for('form')) 

    return redirect(url_for('home')) 

あなたは私が私のフォームから値をそれぞれ取得していますし、beautifulsoup使用して、私のテーブル内の値を掻き落としている見ることができるように。しかし、送信ボタンをクリックすると、永久に読み込まれます。私は上部のペインから谷を取得していますが、テーブルにはありません。

ところで、私はjavascript関数onClickから自分のセルを生成しています。ちょうど私のJavaScriptが問題かもしれません。または、おそらく、javascrip関数 - > pythonからこれらの値を抽出する簡単な方法があります。ここに私のjavascriptのコードとHTML

<script type="text/javascript"> 
    function deleteRow(o){ 
    var p=o.parentNode.parentNode; 
     p.parentNode.removeChild(p); 
     } 

    function addRow() 
     { 

     var table = document.getElementById("datatable"), 
      newRow = table.insertRow(table.length), 
      cell1 = newRow.insertCell(0), 
      cell2 = newRow.insertCell(1), 
      cell3 = newRow.insertCell(2), 


      name = document.getElementById("form").value, 
      amount = document.getElementById("amount").value; 


      delete1 = delete1 = '<input type="button" class="btn btn-danger" class="glyphicon glyphicon-trash"id="delete" value="Delete" onclick="deleteRow(this)">'; 
     cell1.innerHTML = name; 
     cell2.innerHTML = amount; 
     cell3.innerHTML = delete1; 

     findTotal(); 
     } 


function findTotal(){ 
    var arr = document.querySelectorAll("#datatable td:nth-child(2)"); 
    var tot=0; 

    for(var i=0;i<arr.length;i++){ 
     var enter_value = Number(arr[i].textContent) 
     if(enter_value) 
       tot += Number(arr[i].textContent); 
     } 
    document.getElementById('total').value = tot; 
} 

</script> 

はHTMLです:これらの掻き取り値の

    <form name="noc"> 

         <input class="form-control input-lg" id="form" list="languages" placeholder="Search" type="text" required> 
         <br> 
         <input class="form-control input-lg" id="amount" list="languages" placeholder="Amount" type="number" required> 
         <br> 
         <button onclick="addRow(); return false;">Add Item</button> 
        </form> 




     <table id="datatable" class="table table-striped table-bordered" cellspacing="0" width="100%"> 
       <thead> 
    <tr> 
    <th>Nature of Collection</th> 
    <th>Amount</th> 
    <th></th> 

    </tr> 
     </thead> 
<tbody> 
<tr> 

     </tr>  
</tbody> 

</table> 

データは、私は彼らが私のデータベースに保存されることを期待します。セル上。可能であれば、リストを列に挿入して後で取得できるようにします。

また、データベースをよりクリーンでより良い方法でリストを取得する方法はありますか?どんな助けもありがとうございます。ありがとうございました!

+0

自分のWebアプリケーションのページをWebスクレイプすると、非常に間違ったように聞こえます。 – alecxe

+0

@alecxeこの場合、あなたは何をお勧めしますか?私は同じ偶然にも同じ問題に遭遇します – Rekt

答えて

1

JSによって生成されたデータを試して取得するリクエストを使用しているようです。まあ、これはうまくいきません、あなたが多くの人々がしないいくつかの魔法を知らない限り。リクエストはJSを処理できないため、決して実行されません。セレンなどを使用してブラウザを自動化するためのデータを取得できるはずです。そうでなければ、私はあなたがこれのようにそれをかき集めることができるとは思わない。しかし、誰かがリクエストでJSが生成したデータを取得する方法を知っている場合は、投稿してください。

+0

JavaScriptの関数は​​を生成します。彼は必要な値を取得できると欲しがっていると思っています。私が彼だったら、新しく作成したJavaスクリプトの値をPythonスクリプトに渡す方法を見つけたいと思っています。しかし、ええ、私はどちらか分からない、誰かがどのように知っているかもしれない。これが私がこの質問に投票している理由です。誰かが "マジック"イモを知っているかもしれません。免責事項:私はjavascriptで良くないです。 – Rekt

+1

@レック・イェーアそれは私が意味するものです。たぶん私は自分の投稿を言い直す必要があるかもしれませんが、私の理解では、あなたがリクエストを使用している場合にJS関数が実行されることはないので、取得するページに​​データが存在しません。それは私に頭痛を2回以上与え、私はセレンではない解決策を見つけたいと思っています。 – SuperStew

関連する問題