selenium 模拟登陆网易邮箱实例
selenium
一、selenium 模拟登陆网易邮箱老样子,先来看看效果图吧(我没有设置正确的账号和密码,大家自己试的时候可以设置自己的账号密码),思路和分析都在下边,不懂语法的小伙伴可以看webdriver使用方法,下面我有整理。查看网页源码,发现这个标签的id是 switchAccountLogin
browser.find_element_by_id('switchAccountLogin').click()结合图中分析:
browser.find_element_by_name('email').clear()
browser.find_element_by_name('email').send_keys("username")
browser.find_element_by_name('password').clear()
browser.find_element_by_name('password').send_keys('password')
browser.find_element_by_id('dologin').click()但是在这之前有一个特别重要的小环节,如果没有这个小环节是定位不到账号框和密码框的;因为邮箱输入框和密码输入框在iframe中,但是这个iframe id="x-URS-iframe156xxxxxx"后面的数字是一个时间戳。是唯一的,而且name竟然也是设置为“”,所以通过driver.find_element_by_name通过属性获取或者driver.find_element_by_id通过id获取都是提示找不到。
办法只有一个:driver.find_element_by_xpath("//iframe[starts-with(@id, 'x-URS-iframe')]") ;通过使用xpath获取,并且是ids属性是“x-URS-iframe”开头的,就可以动态的获取这个iframe。
driver.switch_to.frame():切换界面,因为通过开发者工具可以看到,输入密码和用户名都是在iframe下,如果不切换到这个iframe.那么始终是找不到。
browser.switch_to.frame(self.browser.find_element_by_xpath("//iframe[starts-with(@id, 'x-URS-iframe')]"))
附完整源码于此:
from selenium import webdriver
import time
class TestMyProjectOne():
def setup_method(self):
self.browser = webdriver.Firefox()
self.browser.get('/')
def teardown_method(self):
self.browser.quit()
def test_myProjectOne(self):
self.browser.find_element_by_id('switchAccountLogin').click()
time.sleep(3)
self.browser.switch_to.frame(self.browser.find_element_by_xpath("//iframe[starts-with(@id, 'x-URS-iframe')]")) #importance
self.browser.find_element_by_name('email').clear()
self.browser.find_element_by_name('email').send_keys("username")
self.browser.find_element_by_name('password').clear()
self.browser.find_element_by_name('password').send_keys('password')
self.browser.find_element_by_id('dologin').click()
time.sleep(120) #休息120s
if __name__ == '__main__':
testMyProjectOne =TestMyProjectOne()
testMyProjectOne.setup_method()
testMyProjectOne.test_myProjectOne()
testMyProjectOne.teardown_method()
二、selenium
先:
后:
warning :未经授权,
有问题的小伙伴请在下方留言,喜欢就点个赞吧;关注我,带你一起写bug