在 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
方法模拟按键输入。
代码中的name
(Username
、Password
)与实际的name
元素(username
、password
)不匹配。
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 数据