使用python和selenium登录网站
我正在尝试自动登录到一个网站。当主页加载时,它有一个登录按钮,该按钮将显示带有使用python和selenium登录网站,python,python-3.x,selenium-webdriver,Python,Python 3.x,Selenium Webdriver,我正在尝试自动登录到一个网站。当主页加载时,它有一个登录按钮,该按钮将显示带有username和password表单的登录表单 按钮位于id等于“loginbox”的div元素内: <div class="col-md-6 col-sm-4 text-right" id="loginbox"> <div class="row"> <div class="col-md-12 margin-bottom-10"> <button type="button"
username
和password
表单的登录表单
按钮位于id等于“loginbox
”的div
元素内:
<div class="col-md-6 col-sm-4 text-right" id="loginbox">
<div class="row">
<div class="col-md-12 margin-bottom-10">
<button type="button" class="btn btnlogin" data-toggle="modal" data-
target="#loginDiv">
运行代码时,出现以下错误:
"Unable to locate element: //div[@id='loginbox']/button[1]"
我应该如何找到这个按钮
这是我填写用户名
和密码
输入的其余代码:
username = wait.until(EC.visibility_of_element_located((By.NAME, "FRMLoginUname")))
username.clear()
username.send_keys('UserName')
password = wait.until(EC.visibility_of_element_located((By.NAME, "FRMLoginPassword")))
password.clear()
password.send_keys('Password')
出现此问题的原因是
loginbox
是由ajax或jquery加载的。
您应该使用显式和隐式两种类型的等待。避免使用隐式等待
在我的电脑上,Firefox的驱动程序需要使用wait()函数,而Chrome的驱动程序则不需要。我认为在Chrome浏览器中,它会一直阻塞,直到页面完全加载。@VincentVidal,是的,但在上面的问题中,用户使用Firefoxdriver@Himanshudua谢谢!我能够成功登录到该网站。@VincentVidal,感谢您提到Chrome和Firefox驱动程序之间的区别。知道这一点很好。我认为在页面加载之前,两种浏览器在阻塞方面的行为都不会有什么不同。根据我的经验,Chrome的速度更快,不像Firefox或IE那样需要等待。
username = wait.until(EC.visibility_of_element_located((By.NAME, "FRMLoginUname")))
username.clear()
username.send_keys('UserName')
password = wait.until(EC.visibility_of_element_located((By.NAME, "FRMLoginPassword")))
password.clear()
password.send_keys('Password')
# Explicit wait example
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
element_login_box = wait.until(EC.element_to_be_clickable((By.ID, 'loginbox')))
# implicit wait example
driver.implicitly_wait(10) # seconds
driver.find_element_by_xpath("//div[@id='loginbox']/button[1]").click()