Python Selenium - 在文本框中输入值

时间:2016-04-02 11:24:58

标签: python selenium

我正在使用python selenium来自动化学生的出勤率。出勤网页中的内容是表格的形式。有一个文本框,我们有标记'A'或'P'。源代码如下:

<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 selenium输入值'P',我尝试的代码是:

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

我也试过

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

但它没有将文本更改为“P”,但光标将转到该文本框。可能是什么问题?是因为'onkeypress'事件吗?请帮助我,我是python selenium的新手。

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;                    
}

2 个答案:

答案 0 :(得分:7)

您需要首先清理字段,因为那里有一个默认的A值:

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

此外,快速而肮脏的解决方案可能是删除onkeypress属性

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

答案 1 :(得分:1)

首先,您的选择器仅适用于一个学生(第一个),而不适用于列表的学生。应该是这样的:

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

至于您的问题,您可能想要查看javascript isNumberKey(event)正在做什么,可能是在输入falseA时返回P