无法使用Selenium(Python)在文本框中键入文本

时间:2018-12-11 10:12:07

标签: python selenium selenium-webdriver

鉴于这是文本框的元素(从Chrome检查元素https://www.mousehuntgame.com/login.php中得到了此内容):

<input name="username" class="username" type="text" placeholder="Enter 
your username" onkeyup="app.pages.LoginPage.checkEnter(event, 'login');">

我正在尝试在输入框中输入一些文本。我按名称搜索了元素,然后使用send_keys()在文本框中输入了一些文本

elem = driver.find_element_by_name("username")
elem.send_keys("aa")

我收到一个例外:

ElementNotVisibleException: Message: element not interactable

我怀疑我没有正确使用find_element_by。我要去哪里错了?

另外:有没有一种方法可以在Chrome中告诉我从find_element_by方法中选择的内容?浏览器中是否有某种方法可以突出显示我用find_element_by方法选择的内容?

3 个答案:

答案 0 :(得分:4)

有两种形式:第一种用于注册,第二种-用于登录...两者都有相同的输入字段,名称为"username"

您可以使用下面的CSS选择器以所需形式选择输入字段:

user_input_register = driver.find_element_by_css_selector("div.register input[name='username']")
user_input_login = driver.find_element_by_css_selector("div.login input[name='username']")

或者您可以定义表单以进一步处理输入字段:

register = driver.find_element_by_class_name('register')
login = driver.find_element_by_class_name('login')

username_register = register.find_element_by_name('username')
username_login = login.find_element_by_name('username')

答案 1 :(得分:1)

正如@Andersson所说,"username"具有多个元素。

您应该使用更具体的XPath,例如:

elem = driver.find_element_by_xpath('//input[@placeholder="Enter your username"]')

elem = driver.find_element_by_xpath('//input[@class="username" and @type="text"]')

答案 2 :(得分:0)

要将字符序列发送到 username 字段,并用 placeholder 文本作为输入用户名,您必须诱使 WebDriverWait < / em>,使元素可以点击,您可以使用以下解决方案:

  • 代码块:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.username[name='username'][placeholder='Enter your username']"))).send_keys("Gen Tan")