所以我在google selenium网站上看到了这个问题,但还没有解决。
当你element.send_key('12345')
时它将返回'123'。 5被解析为退格....
有解决方法吗?
使用最新的selenium,chrome,chromedriver,python 2.7,ubuntu 12.04
答案 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,chrome,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后远程连接的速度有所提高,这对我来说是另一个好处。