在学习Python自动化的过程中,这次在163邮箱登录的时候遇到了元素定位问题,通过资料查找,最终解决,现在记录一下。

问题:账号密码输入框定位失败。

发现问题过程:

按照常规的方法进行元素定位,但是发现试了几种办法后,都无法进行解决,都是提示“NoSuchElementException: Message: no such element”元素无法定位或元素不存在的问题。

from selenium import webdriver
import timedriver=webdriver.Chrome()# 访问163邮箱
mail_url="http://www.mail.163.com"
print("access mail with %s"%mail_url)
driver.get(mail_url)
# time.sleep(10)
# 定位账号输入框
driver.find_element_by_xpath('//input[@name="email"]').clear()  #删除提示信息
driver.find_element_by_xpath('//input[@name="email"]').send_keys("rongxbo")

运行后提示信息如下:

问题解决过程: 

期初以为是元素定位写法有问题,就经过各种修改尝试,发现还是解决不了。最后通过度娘各种查询资料,发现问题所在。产生这个问题跟元素定位没有关系,只是因为这个页面有iframe嵌套页面,需要先切换,再进行元素定位操作才可以。所以,第一步,要先把iframe找出来,然后switch过去试一下。

在进行操作之前,咱们先简单了解一下iframe和switch用法。

什么是iframe?

iframe知识来源于百度百科。

iframe_百度百科IFRAME是HTML标签,作用是文档中的文档,或者浮动的框架(FRAME)。iframe元素会创建包含另外一个文档的内联框架(即行内框架)。https://baike.baidu.com/item/iframe/4446518?fr=aladdin即在一个页面框架里面嵌套其他的框架。所以如果有iframe的时候,要定位元素需要先切换到元素所对应的框架。

switch_to用法介绍:

基于python3的语法,driver.switch_to_alert()的表达会出现中划线,因此需要把后面的下划线改为点.

目前接触到的switch_to的用法包括以下几种:

driver.switch_to.window(window_name)       切换到指定的window_name页面

driver.switch_to.alert()                                    切换到alert弹窗

driver.switch_to.active_element()                  定位到当前聚焦的元素上

driver.switch_to.default_content()                 切换到最上层页面(主文档?)

driver.switch_to.frame(frame_reference)      通过id、name、element(定位的某个元素)、索引来切换到某个frame

driver.switch_to.parent_frame() 这是switch_to中独有的方法,可以切换到上一层的frame,对于层层嵌套的frame很有用

★注意在定位时,报错的提示,如果是no alert这类提示,可能不需要用到switch_to

开始正式解决问题,首先查看163邮箱的元素页面

通过上图我们发现,id元素中包含很长一段数字,这种的一般动态生成的,所以尝试了使用id定位,没有成功。最后尝试使用元素定位的方式来解决,最后成功解决以上问题。

通过先定位iframe元素,然后再通过switch_to.frame()方法切换

from selenium import webdriver
import time# 创建浏览器驱动driverdriver=webdriver.Chrome()
mail_url="http://www.mail.163.com"
# 访问指定网页
driver.get(mail_url)
driver.implicitly_wait(10)# 有内嵌网页,需要先切换到内嵌frame网页再进行定位
driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))# 定位账号输入框
driver.find_element_by_xpath('//input[@name="email"]').clear()  #删除提示信息
driver.find_element_by_xpath('//input[@name="email"]').send_keys("zhangsan")   #测试过程中替换成自己的账号名就可以#定位密码输入框
driver.find_element_by_name("password").clear()
driver.find_element_by_name("password").send_keys("12345678")  #测试过程中替换成自己的密码就可以#定位登录按钮driver.find_element_by_id("dologin").click()driver.implicitly_wait(2000)
driver.quit()

Python自动化学习过程中,算是解决了一个遇到的小问题,也增加了对iframe嵌套网页的理解,继续学习中。

selenium模拟登录163邮箱,定位账号及密码输入框问题和iframe嵌套相关推荐

  1. python模拟qq空间登录_python selenium模拟登录163邮箱和QQ空间

    最近在看python网络爬虫,于是我想自己写一个邮箱和QQ空间的自动登录的小程序, 下面以登录163邮箱和QQ空间和为例: 了解到在Web应用中经常会遇到frame/iframe 表单嵌套页面的应用, ...

  2. Selenium WebDrive使用Edge浏览器模拟登录163邮箱

    ** Selenium WebDrive使用Edge浏览器模拟登录163邮箱(详细过程及代码) ** 1.首先要在pycharm中下载好Selenium 2.然后下载浏览器驱动这里是链接 (https ...

  3. python3爬虫系列21之selenium自动化登录163邮箱并读取未读邮件内容

    python3爬虫系列21之selenium自动化登录163邮箱并读取未读邮件内容 1.前言 前面在 python3爬虫系列20之反爬需要登录的网站三种处理方式中介绍的第三种方法,使用自动化测试工具s ...

  4. python+selenium自动登录163邮箱代码提示错误解决方案(如:NoSuchFrameException: Message: no such frame)

    selenium模块实现163邮箱自动登录操作 利用selenium模块控制Chrome浏览器打开163邮箱网页,并实现自动填写账号密码操作. 在Python中利用selenium模块实现这一目的只需 ...

  5. python模拟登录163邮箱_selenium+python 模拟登陆网易邮箱

    selenium 模拟登陆网易邮箱实例 selenium 一.selenium 模拟登陆网易邮箱老样子,先来看看效果图吧(我没有设置正确的账号和密码,大家自己试的时候可以设置自己的账号密码),思路和分 ...

  6. python利用selenium模拟登陆163邮箱

    首先需要定位登录框的地址,分析过程见 https://www.jianshu.com/p/d59a5611c053 登陆框标签是一个iframe,且id每次都是不一样的,因此不能按id值查找,这里先按 ...

  7. python模拟登录163邮箱_Python实现模拟登录网易邮箱的方法示例

    本文实例讲述了Python实现模拟登录网易邮箱的方法.分享给大家供大家参考,具体如下: #coding:utf-8 import urllib2,urllib import cookielib fro ...

  8. python模拟登录163邮箱_python模拟登陆163邮箱并下载邮件内容(第三版代码片段)

    python模拟登陆163邮箱并下载邮件内容(第三版代码片段) 注意: 1 由于163邮箱有众多版本,所以登录请求URL,邮件URL等可能也不太一样,下面是163的简约3.0 2 代码缺乏错误处理能力 ...

  9. python模拟登录163邮箱_python模拟登录网易邮箱-阿里云开发者社区

    python模拟登录网易邮箱 #coding:utf-8 import urllib2,urllib import cookielib from bs4 import BeautifulSoup #设 ...

最新文章

  1. AppStore IPv6-only审核被拒原因分析及解决方案-b
  2. 只用2页纸,北大数学校友攻破计算机30年难题!过程浅显直白,看懂仅需线性代数基础...
  3. 碎片化时间里的高质量阅读,这几个公众号请收好~
  4. adsafe for linux,新闻|关于网站广告和过滤器的那些事
  5. 如何使Putty会话颜色更美观
  6. 图方法:二分无向图的联通子图查找
  7. 计算机与人脑的异同作文,小学信息技术3-6年级全册教案.pdf
  8. python元胞自动机模拟交通_结构专栏 | 解析DEFORM软件中的元胞自动机法
  9. 实数历史无穷小能否带领我们直接走向今日科学之辉煌?
  10. 全能王PDF转换器 V2.0.0.2
  11. 虚拟服务器怎么进去,怎么进入虚拟主机
  12. Property ‘id‘ not found on type java.lang.String问题解决
  13. python编程心得体会-python核心编程____学习心得____part1
  14. PHP泡泡龙源码,泡泡龙 游戏源码
  15. java项目启动失败的解决方案
  16. 用Linux给手机刷rec,【小白福利】手机端刷入第三方Rec,手把手教会你
  17. 百度云盘群组中资源文件实时同步更新保存到自己群组的方法
  18. 经过路由无法找到计算机,共享打印机找不到对方电脑解决方法
  19. 计算机科学顶尖期刊,重磅!中国各学科顶级期刊名单发布!(影响力指数排名)...
  20. 定时群发如何超过48小时,135编辑器这个功能帮你!

热门文章

  1. java.util.zip 类 ZipEntry
  2. 超能陆战队中的微型机器人现已实现!
  3. 微型机器人一起工作画画
  4. android qq 设置界面大小设置,怎么设置手机腾讯QQ的字体大小
  5. 类风湿关节炎伴发纤维肌痛症患者的炎症与脑内感受性连接的关系
  6. 华为200万年薪“天才少年”,来自985华中科技大学
  7. 一篇文章让你从JAVA零基础入门`OOP`编程12.19
  8. S3C2440之裸机之C语言按键点亮LED灯
  9. VUEX模块化不同模块调用其它模块的mutations报错: [vuex] unknown mutation type: XXX
  10. 禁用系统【快应用】,停止【快应用】自动弹出