【问题标题】:Selenium Python - More compact or Pythonic way of inputting Username and Password?Selenium Python - 输入用户名和密码的更紧凑或 Pythonic 方式?
【发布时间】:2020-10-30 09:06:35
【问题描述】:

我需要登录一个网站,我已经有以下代码,可以正常工作:

username = driver.find_element_by_name('uname')
password = driver.find_element_by_name('password')
username.send_keys('username'), password.send_keys('password', Keys.RETURN)

目前,用户名和密码已硬编码到程序中,但出于安全原因,我最终会要求用户提供两者。有没有办法让我写的东西更紧凑或更 Pythonic?为了我自己的利益,我正在尽可能地接近 PEP8。

【问题讨论】:

    标签: python-3.x selenium selenium-webdriver webdriverwait expected-condition


    【解决方案1】:

    你的程序完全是 Pythonic 除非有 runtime 错误。

    话虽如此,从Selenium 的角度来看,有以下几个问题:

    • 您大概会在调用get() 后开始定位用户名。因此,理想情况下,您必须为element_to_be_clickable() 诱导WebDriverWait,然后调用send_keys(),如下所示:

      driver.get(url)
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.NAME, "'uname'"))).send_keys('username')
      driver.find_element_by_name('password').send_keys('password')
      
    • 此外,我建议避免尝试send_keys(Keys.RETURN),除非您没有任何其他选择。理想情况下,您应该在 LoginSign In 按钮上调用 click(),如下所示:

      driver.find_element_by_css_selector('cssSelector').click()
      # incase the elements are with in a <form>
      driver.find_element_by_css_selector('cssSelector').submit()
      

    【讨论】:

    • 我喜欢在获取用户名元素之前使用 WebDriverWait 的想法,但是找到登录按钮而不是仅使用 Keys.Return 的原因是什么?我仍然通过这个项目学习了很多关于 Python 的知识,这相当令人生畏,因为我正在为我的工作做这件事,尽管这根本不是我被聘用的目的。但我这样做会提高我和我的一位同事的工作效率。
    • @Auske 我没听懂你的问题,你能再来吗?是在WebDriverWait 还是Keys.Return 上?
    • 抱歉,我在问为什么不直接使用Keys.RETURN
    • @Auske 主要原因之一是LoginSign In 按钮可以启用Javascript,甚至可以有onclick 事件只会在调用 click() 时触发。
    • 我只是尝试在我的代码中使用WebDriverWait,但我无法让它工作。尝试查找元素会超时。但我确实继续更改Keys.RETURN。这是我的新台词:print('Finding username and password and sending both')driver.find_element_by_name('uname').send_keys(username)driver.find_element_by_name('password').send_keys(password)driver.find_element_by_class_name("bttn").click()print('Logging in')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 2019-06-29
    • 2010-10-26
    • 1970-01-01
    相关资源
    最近更新 更多