如何使用Python Selenium Webdriver正确登录网站?

时间:2019-08-26 07:05:03

标签: python selenium selenium-webdriver web-scraping web-crawler

我正在尝试通过python使用Selenium Webdriver登录我的amboss帐户,但是由于我没有太多经验,所以我不知道出了什么问题。我的凭据(电子邮件和密码)是正确的,因为我以前曾使用它们登录网站。

到目前为止,这是我的代码:

# run firefox webdriver from executable path 
driver = webdriver.Firefox(firefox_options=options, capabilities=cap, executable_path = path_to_driver)


driver.get("https://www.amboss.com/us/account/login")

signinusername = config['amboss']['email']
signinpassword= config['amboss']['password']

username = driver.find_element_by_id("signin_username")
username.clear()
username.send_keys(signinusername)

pwd = driver.find_element_by_xpath("//*[@id='signin_username']")
pwd.clear()
pwd.send_keys(signinpassword)

loginbutton = driver.find_element_by_xpath("/html/body/div[2]/div[1]/div/div/form/div[4]/input").click()
time.sleep(20)

# execute script to scroll down the page
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);var lenOfPage=document.body.scrollHeight;return lenOfPage;")

#element in log in page
newelement = driver.find_element_by_xpath("//*[@id='left']/p[1]/strong")
print(newelement.get_attribute('innerHTML'))

我在这里尝试做的是登录到平台,然后获取xpath在欢迎页面中看到的元素。尽管硒无法找到此元素,但出现以下错误:

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: //*[@id='left']/p[1]/strong

有人知道为什么会这样吗?是因为登录失败还是其他原因?预先感谢

3 个答案:

答案 0 :(得分:0)

更新

您尝试获取的元素位于iframe中,因此您需要切换到该iframe,以便它们可见。以下作品,请尝试。

username = driver.find_element_by_id("signin_username")
username.clear()
username.send_keys(signinusername)

pwd = driver.find_element_by_id('signin_password')
pwd.clear()
pwd.send_keys(signinpassword)

loginbutton = driver.find_element_by_class_name('amboss-button').click()
time.sleep(2)

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);var lenOfPage=document.body.scrollHeight;return lenOfPage;")
time.sleep(2)
frames = driver.find_elements_by_tag_name('iframe')
driver.switch_to.frame(frames[4])
newelement = driver.find_elements_by_tag_name('p')[0].text  # This prints the following 'You now have access to AMBOSS—an all-in-one pl....'
print(newelement)

答案 1 :(得分:0)

我假设您正在尝试登录系统并尝试查找某些内容。

首先,您的登录尝试不正确。您正在代码中的用户名字段中输入密码。

请这样登录:

首先,将此导入添加到您的python脚本中:

from selenium.webdriver.common.keys import Keys

然后像这样登录:

username = driver.find_element_by_id("signin_username")
username.clear()
username.send_keys(signinusername)

pwd = driver.find_element_by_id("signin_password")
pwd.clear()
pwd.send_keys(signinpassword)
pwd.send_keys(Keys.ENTER)

我没有通过单击按钮登录。登录后只需按ENTER。 我猜想纠正登录尝试将帮助您找到元素并在其中打印内容。

我已经在amboss中创建了一个帐户来回答您的问题,并且登录后发现唯一的iframe来自Google跟踪代码管理器,但其中没有任何内容。因此,我不确定您的帐户是否包含其他一些网络视图。

希望更正登录尝试会有所帮助。

答案 2 :(得分:-1)

首先您错了,这是第行:

pwd = driver.find_element_by_xpath("//*[@id='signin_username']")

请更改为:

pwd = driver.find_element_by_id('signin_password')

第二,使用条件if进行验证成功或登录失败:

click login here
time.sleep(20)#here recommendation use WebDriverWait
count = len(driver.find_elements_by_xpath("//*[@id='left']/p[1]/strong"))
if count > 0:
    print("login success")
    print(driver.find_element_by_xpath("//*[@id='left']/p[1]/strong").text)
else:
    print("login failed")

确保这是正确的定位符://*[@id='left']/p[1]/strong