在 python 中使用 selenium 填写用户名和密码

Posted

技术标签:

【中文标题】在 python 中使用 selenium 填写用户名和密码【英文标题】:Fill username and password using selenium in python 【发布时间】: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")

【问题讨论】:

【参考方案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()

代码注释:

find_element_by_name('Username'): Username 大写的不匹配。 Select() 用于作用于选择元素 (https://developer.mozilla.org/en-US/docs/Web/html/Element/select)

【讨论】:

您好,您知道如何阅读提交表单后加载的页面内容吗?我正在为一个网站写一个测试,我设法提交了表格,现在我迷路了。换句话说,我想获取受限的、仅限会员登陆页面的内容。 @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"))

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

【讨论】:

解决方案与问题相比有所不同

以上是关于在 python 中使用 selenium 填写用户名和密码的主要内容,如果未能解决你的问题,请参考以下文章

在 Python、Selenium 中跨多个 Firefox 页面拉取 Excel 数据

python Web抓取selenium模块的使用

Python selenium无法通过ID或xpath填写输入框。

python selenium自动化填写问卷星

python selenium问题求教

如何使用 Selenium 和 Python 在信用卡号字段中输入日期?