首页 > 解决方案 > 如何使用 Python Selenium webdriver 正确登录网站?

问题描述

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

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

# 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 无法找到此元素,但我收到以下错误:

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

有谁明白为什么会这样?是因为登录不成功还是有其他问题?提前致谢

标签: pythonseleniumselenium-webdriverweb-scrapingweb-crawler

解决方案


更新

您尝试获取的元素位于 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)

推荐阅读