2016-04-02 10 views
2

私は私たちの学生の出席者の入力を自動化するためにpythonセレンを使用しています。出席者のWebページの内容は表形式です。 「A」または「P」のマークが付いたテキストボックスがあります。次のようにソースコードは次のとおりです。Python Selenium - テキストボックスに値を入力

<form name="attendance1" action="/sjcet/attendance.php" method="POST"> 
        <table style="width: 65%; margin: auto;"> 
         <tr> 
          <th style="text-align: center;">Roll No.</th> 
          <th style="text-align: center;">PID</th> 
          <th style="text-align: center;">Student Name</th> 
          <th style="text-align: center;">Status</th> 
          <th style="text-align: center;">Any Comment</th> 
         </tr> 
                 <tr style="text-align: center;"> 
           <td style="text-align: center;"> <input name="roll_no[]" tabindex="0" size="3" type='text' value = '1' readonly='readonly' style="text-align: center;" /> </td> 
           <td style="text-align: center;"> <input name="pid[]" tabindex="0" size="10" type='text' value = 'EU1124021' readonly='readonly' style="text-align: center;" /> </td> 
           <td style="text-align: left;"> Abraham Ancy Chandy Anne</td> 
           <td style="text-align: center;"> 
            <input size="3" name="status[]" type="text" onkeypress="return isNumberKey(event)" maxlength ="1" tabindex="1" 
              style="text-align: center;" value='A' /> 
           </td> 
           <td style="text-align: center;"> 
            <input size="20" name="comment[]" type="text" /> 
                     </td> 
          </tr> 
                  <tr style="text-align: center;"> 
           <td style="text-align: center;"> <input name="roll_no[]" tabindex="0" size="3" type='text' value = '2' readonly='readonly' style="text-align: center;" /> </td> 
           <td style="text-align: center;"> <input name="pid[]" tabindex="0" size="10" type='text' value = 'EU2134011' readonly='readonly' style="text-align: center;" /> </td> 
           <td style="text-align: left;"> Barabde Pranjal Sanjiv Sudha</td> 
           <td style="text-align: center;"> 
            <input size="3" name="status[]" type="text" onkeypress="return isNumberKey(event)" maxlength ="1" tabindex="2" 
              style="text-align: center;" value='A' /> 
           </td> 
           <td style="text-align: center;"> 
            <input size="20" name="comment[]" type="text" /> 
                     </td> 
          </tr> 

我々は次のように「P」または「A」が入力するテキストボックスのコード:デフォルトでは

<input size="3" name="status[]" type="text" onkeypress="return isNumberKey(event)" maxlength ="1" tabindex="1" 
              style="text-align: center;" value='A' /> 
... 
... 
... 
<input size="3" name="status[]" type="text" onkeypress="return isNumberKey(event)" maxlength ="1" tabindex="2" 
              style="text-align: center;" value='A' /> 

値は「A」です、私は、Pythonのセレンを使用して 'P' 値を入力しようとした私が試したコードは次の通りであった:

driver.find_element_by_css_selector("input[tabindex='1']").send_keys('P') 

Iも

driver.find_element_by_xpath("//input[@tabindex='1']").send_keys('P') 
を試し

しかし、テキストを 'P'に変更していませんが、カーソルはそのテキストボックスに移動しています。何が問題なのでしょうか?それは 'onkeypress'イベントのためですか?親切に私はこれで私を助け、私はPythonのセレンに新しいです。次のように

isNumberKey(イベント)のコードは次のとおりです。すべての

function isNumberKey(evt) 
{ 
    var charCode = (evt.which) ? evt.which : event.keyCode 

    if(charCode != 8){ 
     if(charCode != 112) 
     { 
      if(charCode != 80) 
      { 
       if(charCode != 97) 
       { 
        if(charCode != 65) 
        { 
         return false; 
        } 
       } 
      } 
     } 
    } 
    return true;      
} 

答えて

6

Pを入力するとき、あなたの問題については

driver.find_elements_by_css_selector("input[name^='status']") 

を、あなたはあなたがきれいにする必要が、それはそれはfalseを返すことかもしれないが、それはJavaScript isNumberKey(event)が何をしているかをチェックすることをお勧めしますそこデフォルトA値があるので、最初のフィールドまで:また

for elm in driver.find_elements_by_css_selector("input[name^=status]"): 
    elm.clear() 
    elm.send_keys('P') 

は、迅速かつ汚いソリューションは、bの可能性返信用

for elm in driver.find_elements_by_css_selector("input[name^=status]"): 
    driver.execute_script("arguments[0].removeAttribute('onkeypress');", elm) 
    elm.send_keys('P') 
+0

返事をありがとう。コードを実行しましたが、値 'P'がテキストボックスに入力されていません。テキストボックスは、キーボードから 'P'、 'A'、 'p'、および 'a'を受け入れるだけです。それをそうする方法はありますか? – Jeril

+0

@ user2825570これが起こっているページへのリンクを共有していただけますか?ありがとう。 – alecxe

+0

ありがとうございます。私はtinyupload [ドット] comを使用してhtmlファイルをアップロードしました。 [ここ](http://s000.tinyupload.com/download.php?file_id=07815236747065523698&t=0781523674706552369834900)からダウンロードできます。ファイル名はatt [dot] htmlです。実際のウェブサイトは、私たちの大学のLANを通じてのみアクセスできます。 – Jeril

1

まず、あなたのセレクタは、一人の学生(最初)のためではない学生のリストのためにのみ機能します。以下のようなものでなければなりません:Aまたは

+0

ありがとう:へのeはonkeypress属性を削除します。しかし、問題は、send_keys( 'P')を使用して、テキストボックスに値 'P'を与える​​ことができないことです。値を渡す他の方法はありますか?また、isNumberKey()関数を追加して質問を編集しました。 – Jeril

+0

JSはうまくいきました。あなたは 'tabindex = 1'のページに他の入力要素があるかもしれないので、提案したようにクエリを変更してみてください(foreachループに入れてください)。 –

+0

ソースを検索しましたコードは、1つのtabindex = 1と私のコードは、正確なテキストボックスにカーソルを話していたが、値 'P'は、テキストボックスに入力されていません。テキストボックスは、キーボードから値 'P'が押されたときだけ話します。キーボードから与えられたかのように、セレンを使って値 'P'を与える​​方法はありますか? – Jeril

関連する問題