我正在尝试通过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
有人知道为什么会这样吗?是因为登录失败还是其他原因?预先感谢
答案 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