selenium模拟登录获取iframe标签(#document
2018-12-11 本文已影响91人
Mr_zY
目标网址
https://www.shiguangkey.com/
该网站基本都是使用js进行渲染,使用selenium模拟登录更加简单
实现
- 首先获取并点击首页的‘登录’按钮,可看到弹出登录框
# 点击登录按钮
btn = wait.until(
EC.presence_of_element_located((By.XPATH, "//a[@class='_320Oc O8KBD']"))
)
btn.click()
登录框.png
-
此时要获取该框中的元素时,就会抛出超时异常,查看源码可发现,该登录框是由iframe元素实现的。
源码.png
- iframe是内嵌的网页元素,我们想获取其中的元素,需要先切换到iframe元素中
# 切换iFrame
wait.until(
EC.frame_to_be_available_and_switch_to_it((By.ID, "LOGIN_FRAME"))
)
- 此时,一次获取输入框并输入账户密码即可登录成功,并通过
get_cookies()
函数获取其所有cookies以备之后使用。
- 由于该网站石油JS进行渲染,其网页源码只有极少基本信息。检验cookies是否可用,可访问个人信息页面
https://www.shiguangkey.com/i/profile
通过其状态码进行判断。- 该站点更新频繁,本文章只为介绍selenium模拟登录过程中iframe标签中元素无法获取的解决方案
- 参考于
https://blog.csdn.net/huifeituzi/article/details/50517672
和https://www.cnblogs.com/ketangxiaohai/p/9216483.html