Selenium学习二——自动登陆163邮箱并发送邮件
编程过程中遇到的问题就是元素定位不到,因为id的值是每次登陆是会变化的,所以用css_selector的多层模式去定位元素。
如发送按钮:
网页源码:
利用css_selector定位:
driver.find_element_by_css_selector(“div[@id^='_mail_button_2']>span.nui-btn-text”)
^用于匹配一个前缀,$用于匹配一个后缀,*用于匹配任意字符
#coding:utf-8 from selenium import webdriver import time driver = webdriver.Chrome() url = "http://mail.163.com/" driver.get(url) time.sleep(2) #跳转到登陆frame element = driver.find_element_by_id("x-URS-iframe") driver.switch_to.frame(element) time.sleep(2) #登陆邮箱 driver.find_element_by_name("email").send_keys("xxx") driver.find_element_by_name("password").send_keys("xxx") time.sleep(2) driver.find_element_by_id("dologin").click() time.sleep(6) print "login in" #点击写信 driver.find_element_by_xpath(".//*[@id='_mail_component_68_68']").click() print "click ok" time.sleep(6) #写入发送人和邮件主题 driver.find_element_by_class_name('nui-editableAddr-ipt').send_keys("xxx") time.sleep(3) driver.find_element_by_css_selector("div[id^='_mail_input_2']>input.nui-ipt-input").send_keys("selenium") #编写邮件内容,首先切换frame frame = driver.find_element_by_class_name("APP-editor-iframe") driver.switch_to.frame(frame) driver.find_element_by_class_name("nui-scroll").send_keys("xxx") #返回上一层frame driver.switch_to.default_content() time.sleep(6) #点击发送邮件 driver.find_element_by_css_selector("div[id^='_mail_button_2']>span.nui-btn-text").click()
注意:写邮件时,要先切换frame到邮件内容的frame,最后切换回来,再点击发送。