Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python和selenium登录网站_Python_Python 3.x_Selenium Webdriver - Fatal编程技术网

使用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()