Python:Selenium send_key不能输入5或6之类的数字

时间:2015-05-06 10:07:12

标签: python selenium

所以我在google selenium网站上看到了这个问题,但还没有解决。

当你element.send_key('12345')

它将返回'123'。 5被解析为退格....

有解决方法吗?

使用最新的selenium,chr​​ome,chromedriver,python 2.7,ubuntu 12.04

7 个答案:

答案 0 :(得分:3)

我没有chromedriver,所以我无法测试这个,但输入数字5的另一种方法是使用以下命令:

Keys.NUMPAD5

您的代码看起来像这样:

element.send_keys(Keys.NUMPAD5)

PS:发送' 5'在FirefoxDriver上工作正常,上面的命令

也是如此

答案 1 :(得分:2)

我也有这个问题。它最终是由于我在远程Ubuntu(16.04)实例上安装的VNC客户端(tightVNC)。

我按照这里的建议(https://bugs.chromium.org/p/chromedriver/issues/detail?id=1037)删除了tightVNC。我安装了vnc4server,这似乎解决了无法传递特定数字的异常行为。

答案 2 :(得分:0)

driver = webdriver.Chrome("\\chromedriver.exe")
driver.get("Https://www.google.com")
driver.find_element_by_id("lst-ib").send_keys("12345")

在Windows上使用最新的selenium,chr​​ome,chromedriver,python 2.7它运行良好

答案 3 :(得分:0)

这似乎是一个错误...我发现了一种可能的解决方法。

通过the Selenium issue tracker搜索,我找到了this somewhat similar issue。在其讨论中,Message #9提到了一种解决方法:使用textBox.send_keys("R&d")代替textBox.send_keys("R/&d"),然后删除额外的/字符。额外的字符被删除了如下:

textBox.send_keys("R/&d")
textBox.sendKeys(Keys.LEFT);
textBox.sendKeys(Keys.LEFT);
textBox.sendKeys(Keys.BACK_SPACE);

我无法对此进行测试,因为我没有与您相似的设置。我很高兴听到这是否有效!

答案 4 :(得分:0)

send_keys()方法可以在我的Windows设置中正常工作,但我构建了一个可以解决问题的方法。正如其他人已经建议的那样,使用selenium.webdriver.common.keys.Keys常量:

def send_keys_workaround(element, string):
    for s in string:
        if s == '5':
            element.send_keys(Keys.NUMPAD5)
        elif s == '6':
            element.send_keys(Keys.NUMPAD6)
        else:
            element.send_keys(s)

我已经设置了一个简约的jsfiddle,以测试它是否至少适用于Windows。我希望它也适用于你的Ubuntu。完整的脚本在这里:

from selenium.webdriver.chrome.webdriver import WebDriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys


def send_keys_workaround(element, string):
    for s in string:
        if s == '5':
            element.send_keys(Keys.NUMPAD5)
        elif s == '6':
            element.send_keys(Keys.NUMPAD6)
        else:
            element.send_keys(s)


driver = WebDriver("****INSERT PATH TO CHROMEDRIVER***")
driver.get("http://jsfiddle.net/zwktb7tn/")

wait = WebDriverWait(driver, 20, 2) 
wait.until(expected_conditions.frame_to_be_available_and_switch_to_it((By.NAME, 'result')))

element = driver.find_element_by_id('inputfield')
send_keys_workaround(element, "123456") 

答案 5 :(得分:0)

感谢您为他的解决方法jump4fun。在我的代码中使用了它,并且可以正常工作。我可以在命令行中输入数字,它们将被转换为send_key的字符串。

if page_number == 1:
   pass
else:
   print('Attempt to start from Page', page_number)
   driver.find_element_by_id(page_number_id).click()
   driver.find_element_by_id(page_number_id).send_keys(Keys.CONTROL, 'a')
   driver.find_element_by_id(page_number_id).clear()
   element = driver.find_element_by_id("pageNumber")
   # send_keys doesn't like numbers directly from the gui but is OK if NUMPAD is used
   # this workaround maps the entered digits to the send_key string argument
   send_keys_workaround(element, str(page_number)) 
   driver.find_element_by_id(page_number_id).send_keys(Keys.RETURN)
   sleep(10)

soup = BeautifulSoup(driver.page_source, 'lxml')

# obtain the current page and last page numbers
page=soup.find('div', attrs={'class':'text-lg-right'})
# print(page)
page_number = page.input['value']

答案 6 :(得分:0)

正如亲爱的@Epiwin 提到的,这是 TightVNC 或 chrome 驱动程序和它的组合中的一个可怕的错误,我已经完全删除了它并安装了 TigerVNC,最终它起作用了。 BTW,不知道为什么!但是迁移到TigerVNC后远程连接的速度有所提高,这对我来说是另一个好处。