【问题标题】:Fill username and password using selenium in python在 python 中使用 selenium 填写用户名和密码
【发布时间】:2014-02-06 19:24:36
【问题描述】:

如何通过以下链接自动填写用户名和密码:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

chromedriver = 'C:\\chromedriver.exe'
browser = webdriver.Chrome(chromedriver)
browser.get('http://www.example.com')

之后我真的不知道了:

username = Select(browser.find_element_by_name('Username'))
password = Select(browser.find_element_by_name('Password'))
username.select_by_visible_text("text")
password.select_by_visible_text("text")

【问题讨论】:

    标签: python selenium


    【解决方案1】:
    driver = webdriver.Firefox(...)  # Or Chrome(), or Ie(), or Opera()
    
    username = driver.find_element_by_id("username")
    password = driver.find_element_by_id("password")
    
    username.send_keys("YourUsername")
    password.send_keys("Pa55worD")
    
    driver.find_element_by_name("submit").click()
    

    代码注释:

    【讨论】:

    • 您好,您知道如何阅读提交表单后加载的页面内容吗?我正在为一个网站写一个测试,我设法提交了表格,现在我迷路了。换句话说,我想获取受限的、仅限会员登陆页面的内容。
    • @NinoŠkopac “selenium”对象就像浏览器一样工作。一旦你“点击”它会加载新的登陆页面,所以你可以做'selenium.find_element_by_id(“whatever”)'。另请阅读“selenium.implicitly_wait()”以在页面加载之间等待。
    • 注意,上面的答案中,selenium应该是获取到的驱动句柄,例如selenium = webdriver.Firefox()
    • @xbello 非常感谢!
    【解决方案2】:

    使用WebElement.send_keys方法模拟按键输入。

    代码中的nameUsernamePassword)与实际的name元素(usernamepassword)不匹配。


    username = browser.find_element_by_name('username')
    username.send_keys('user1')
    
    password = browser.find_element_by_name('password')
    password.send_keys('secret')
    
    form = browser.find_element_by_id('loginForm')
    form.submit()
    
    # OR  browser.find_element_by_id('submit').click()
    

    【讨论】:

    • 当我尝试这个时,我得到这个错误:'StatefulBrowser' object has no attribute 'find_element_by_name'
    • @AnaClaudia,自从我发布此答案以来,api 可能已更改。请检查文档。
    【解决方案3】:
    user = driver.find_element_by_name("username")
    password = driver.find_element_by_name("password")
    user.clear()
    user.send_keys("your_user_name")
    password.clear()
    password.send_keys("your_password")
    driver.find_element_by_name("submit").click()
    

    注意:

    • 我们使用user.clear() 来清除输入字段。
    • 对于定位提交按钮,您可以使用基于页面源代码的任何其他方法。有关信息,请参阅locating elements

    【讨论】:

      【解决方案4】:

      在某些情况下,当元素不可交互时,sendKeys() 不起作用,您可能会遇到ElementNotInteractableException

      在这种情况下,您可以选择执行设置值然后回发的 javascript。

      例子:

      url = 'https://www.your_url.com/'
      
      driver = Chrome(executable_path="./chromedriver")
      driver.get(url)
      
      username = 'your_username'
      password = 'your_password'
      
      #Setting the value of email input field
      driver.execute_script(f'var element = document.getElementById("email"); element.value = "{username}";')
      
      #Setting the value of password input field
      driver.execute_script(f'var element = document.getElementById("password"); element.value = "{password}";')
      
      #Submitting the form or click the login button also
      driver.execute_script(f'document.getElementsByClassName("login_form")[0].submit();')
      
      print(driver.page_source)
      
      

      参考:

      https://www.quora.com/How-do-I-resolve-the-ElementNotInteractableException-in-Selenium-WebDriver

      【讨论】:

        【解决方案5】:
        from selenium import webdriver
        from selenium.webdriver.common.keys import Keys
        from selenium.webdriver.support.ui import Select
        from selenium.webdriver.support.ui import WebDriverWait
        
        # If you want to open Chrome
        driver = webdriver.Chrome()
        # If you want to open Firefox
        driver = webdriver.Firefox()
        
        username = driver.find_element_by_id("username")
        password = driver.find_element_by_id("password")
        username.send_keys("YourUsername")
        password.send_keys("YourPassword")
        driver.find_element_by_id("submit_btn").click()
        

        【讨论】:

          【解决方案6】:

          我是 selenium 的新手,我尝试了上述所有解决方案,但它们都不起作用。 最后,我手动尝试了

          driver = webdriver.Firefox()
          import time
          
          driver.get(url)
          
          time.sleep(20)
          
          print (driver.page_source.encode("utf-8"))
          

          然后我可以从网络上获取内容。

          【讨论】:

          • 解决方案与问题相比有所不同
          猜你喜欢
          • 2018-01-05
          • 2014-07-25
          • 1970-01-01
          • 2019-07-19
          • 1970-01-01
          • 1970-01-01
          • 2020-05-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多