使用selenium登录网页

时间:2017-09-08 19:59:57

标签: python selenium login

我对此完全陌生。

我正在关注我可以在这里找到的示例并写下以下内容:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

thisDirectory = 'my directory'

waitTime = 20

URL_entry = "https://www.capitaliq.com"
username = "my username"
password = "my password"

browser = webdriver.Chrome(executable_path=thisDirectory + 
'\\chromedriver.exe')  
browser.get(URL_entry)

userNameBox = WebDriverWait(browser, waitTime).until(
EC.presence_of_element_located((By.XPATH, '//input[@id="txtUsername"]'))
)
userNameBox.send_keys(username)

passwordBox = WebDriverWait(browser, waitTime).until(
EC.presence_of_element_located((By.XPATH, '//input[@id="txtPwd"]'))
)
passwordBox.send_keys(password)
loginButton = WebDriverWait(browser, waitTime).until(
EC.presence_of_element_located((By.XPATH, '//input[@name="butSignin"]'))
)
loginButton.click()
time.sleep(waitTime) 

我还尝试了一些其他略有不同的方法,但总是收到错误消息:raise TimeoutException(message,screen,stacktrace) TimeoutException:消息:

这是我第一次在这里发帖,抱歉,如果我做了任何不合适的事情。任何帮助将不胜感激。非常感谢。

1 个答案:

答案 0 :(得分:1)

您使用错误的定位器:https://www.capitaliq.com登录页面上没有id属性"txtUsername""txtPwd""butSignin"的元素...

请尝试以下行:

userNameBox = WebDriverWait(browser, waitTime).until(
EC.presence_of_element_located((By.ID, 'username'))
)

userNameBox.send_keys(username)

passwordBox = WebDriverWait(browser, waitTime).until(
EC.presence_of_element_located((By.ID, 'password'))
) 

passwordBox.send_keys(password)

loginButton = WebDriverWait(browser, waitTime).until(
EC.presence_of_element_located((By.ID, 'myLoginButton'))
)

loginButton.click()

请注意,授权表单中元素的定位符对于所有网站都不相同。要获得准确定位器,您可以

右键点击浏览器中的元素 - >选择“Inspect element” - >检查目标元素的源代码...在那里,您可以找到唯一的id / name值或您可以使用的其他属性to locate element