python - 如何使用 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
有谁明白为什么会这样?是因为登录不成功还是有其他问题?提前致谢
解决方案
更新
您尝试获取的元素位于 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)
推荐阅读
- php - 列出客户的所有 Stripe 事件
- javascript - 使用 .map 为每个元素加 1
- c - Arduino 和指向 char 数组的指针
- php - 如何获取 localhost URL 到在线 Web 服务器
- javascript - 从带有 WebBrowser VB.NET 令牌的元素中获取完整 ID
- c - 一定大小的二维数组的分段错误
- selenium - 如何在 Docker 上的两个 chrome 浏览器实例上并行分组和运行黄瓜硒测试?
- javascript - 在 _.invoke 源代码中,args 的作用是什么?
- javascript - 基于给定索引突出显示字符串
- matplotlib - 我们可以从二次方程中找到特定拟合参数的值吗?