selenium实现163邮箱自动登录

1、报错1:selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {“method”:“name”,“selector”:“email”}

换了几乎所有的元素定位方法,都是找不到元素,网搜了一大圈,发现是由于登录框的页面调用了iframe(浮动帧标记),webdriver只能在同一层定位元素

#-*- coding:utf-8 -*-

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("http://mail.163.com/")
driver.maximize_window()  #窗口最大化
time.sleep(1)
  
driver.find_element_by_name("email").send_keys("daqiqi_0453")
driver.find_element_by_name("password").send_keys("daqiqi0453")
driver.find_element_by_id("dologin").click()

有iframe的代码是这样的
selenium实现163邮箱自动登录
2 看网上的解决办法是加了一句

driver.switch_to.frame('x-URS-iframe)

加上之后,报错NoSuchFrame
比对了别人看到的iframe代码和我看到的,发现id值后面的数字每次都会变,这种叫做动态iframe,那就不能用id值来定位了,选择tag方法,先定位到iframe,然后再切换到iframe层,问题解决。完整代码如下(看了下qq邮箱也用了iframe)

发现就是后面这一串数字老是变化
selenium实现163邮箱自动登录

  #-*- coding:utf-8 -*-

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("http://mail.163.com/")
driver.maximize_window()  #窗口最大化
time.sleep(1)

#163邮箱的输入框在邮箱的输入框在iframe上
iframe = driver.find_element_by_tag_name('iframe')
driver.switch_to.frame(iframe)

driver.find_element_by_name("email").send_keys("daqiqi_0453")
driver.find_element_by_name("password").send_keys("daqiqi0453")
driver.find_element_by_id("dologin").click()


#driver.switch_to.default_content()  #登录后退出iframe

#判断是否登录陈成功
# name = driver.find_element_by_id("spnUid").text #这个元素找不到
# print(name)
# 
# if name == '[email protected]':
#     print(u'登录成功')
# else:
#     print(u'登录失败')

time.sleep(1)

#退出浏览器
driver.find_element_by_link_text("退出").click()
driver.quit()

想研究下登录是否成功的代码,但是一直找不到元素。。