【问题标题】:Find by element and send keys not working for second time按元素查找并发送密钥第二次不起作用
【发布时间】:2013-06-15 11:05:14
【问题描述】:

我正在使用一些带有 Chrome 网络驱动程序的 python 代码来登录网站。

我通过 id 查找元素,然后输入用户名和密码。

它适用于第一个元素条目,无论是用户名还是密码,但它不适用于以下元素。它被 id 语句卡在 find 元素上。

这是我的代码,

chromedriver = "C:\\Users\\testuser\\Desktop\\chrome\\chromedriver"
os.environ["webdriver.chrome.driver"] = chromedriver
driver = webdriver.Chrome(chromedriver)
driver.get("https://*****/login/")
print 1 
Password1= driver.find_element_by_id("Password").send_keys("******")
print 2
Username1= driver.find_element_by_id("Username").send_keys("******")

代码在 print 2 之后停止,它没有通过 id 检测到第二个查找元素。

【问题讨论】:

  • 发布元素 HTML
  • 有时 id 是动态生成的。你确定不是这样吗?
  • 什么版本的 Chrome 和什么版本的 Chrome 驱动程序?
  • 我也遇到了这个问题。我可以在找到一些东西后执行一个命令,然后下一个命令挂起。例如,如果我找到一个“用户名”元素并使用“send_keys()”,则对驱动程序的任何进一步命令都会挂起(包括“click()、send_keys()、find_*())。

标签: python selenium selenium-chromedriver


【解决方案1】:

尝试向click添加呼叫:

elt = driver.find_element_by_id("Password")
elt.click()
elt.send_keys("******")
elt = driver.find_element_by_id("Username")
elt.click()
elt.send_keys("******")

【讨论】:

  • 您好,感谢您的回复。但是单击我也已经尝试过,现在再次尝试。但我的问题在于元素的查找部分。它实际上陷入了寻找点击之前的元素。单击操作仅在此之后出现。注意:点击适用于第一个元素(用户名)。
  • 你能把密码和用户名<inputs>周围的HTML贴出来吗?
  • 您好,请查找 XML
    s.test.com/ControlPanel/#reset" class="ForgotPassword">忘记密码?
【解决方案2】:

1) 使用 WebDriverWait:

WebDriverWait 等待 = new WebDriverWait(驱动程序, 30); wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("Username")));

2) 或者可能是 bewebdriver 无法在页面上找到元素,所以在这种情况下,请使用其他定位器,例如 xpath。

希望对你有帮助:)

【讨论】:

  • 我们已经尝试过 Xpath。我认为这是 Chrome 的问题。带有 chrome Webdriver 的代码对每台机器的反应都不同。我将尝试 webdirverwait。 (我们已经通过 40 秒的 sleep 语句等待,如果这是 webdriver 等待的意图)
【解决方案3】:
  1. 在输入之前添加一些超时等待
  2. 或者当您的浏览器保存每个文件时,添加 blbla.clear(); 是明智的。在 bla.sendkeys() 之前;

【讨论】:

    猜你喜欢
    • 2016-04-23
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 2016-03-19
    • 1970-01-01
    相关资源
    最近更新 更多