我在登录163邮箱后实现自动化发送邮件的过程中又遇到了一些问题,在此记录一下
先附上完整代码
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://mail.163.com/')
driver.maximize_window()
iframe = driver.find_element_by_tag_name('iframe')
driver.switch_to.frame(iframe)
driver.find_element_by_name('email').send_keys('lsq1176701245')
driver.find_element_by_name('password').send_keys('19980312lsq')
driver.find_element_by_id('dologin').click()
time.sleep(2)
# 发送邮件
driver.find_element_by_xpath('/html/body/div[1]/nav/div[1]/ul/li[2]').click()
time.sleep(2)
driver.find_element_by_class_name('nui-editableAddr-ipt').send_keys('1176701245@qq.com')
driver.find_elements_by_class_name('nui-ipt-input')[2].send_keys('test_title')
i_frame = driver.find_element_by_class_name('APP-editor-iframe')
driver.switch_to.frame(i_frame)
driver.find_element_by_class_name('nui-scroll').send_keys('this is content')
driver.switch_to.default_content()
driver.find_element_by_xpath('/html/body/div[2]/div[1]/div[2]/div[1]/section/footer/div[1]/span[2]').click()
1.每个元素的定位方式都不太一样,有些元素虽然是给出了id,但这个id是随机生成的,不是固定不变的,这也就导致了定位失败,所以在定位的时候可以id,classname,xpath都试一下
2.在根据classname定位的时候,有时候一个页面内有多个元素用的同样的classname名,这可能导致定位偏差
所以可以使用写法driver.find_elements_by_class_name('nui-ipt-input')[2].send_keys('test_title')
来准确定位
3.一个页面内可能有多个iframe,所以一味的使用 driver.find_element_by_tag_name('iframe')
来定位可能会导致错误,可以试试使用classname来定位到具体的iframe: i_frame = driver.find_element_by_class_name('APP-editor-iframe')