鉴于这是文本框的元素(从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方法选择的内容?
答案 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")