Python 3 + Selenium 3 简单入门学习示例 126邮箱登陆

这是一个不少基础演示的书上的例子,可是通常按照这些书上的代码可能都不能成功登陆。也许是网易修改了126的页面致使的吧,下面给出最新的可以work的版本python

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from time import sleep
import unittest


class Login126Main(unittest.TestCase):
    def setUp(self) -> None:
        self.url = 'https://m.126.com/'
        self.username = 'herbert.zhou'
        self.userpassword = 'XXXXXX'
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.driver.maximize_window()

    def test_login(self):
        driver = self.driver
        driver.get(self.url)
        sleep(5)

        self.assertEqual(driver.title, '126网易免费邮--你的专业电子邮局', '登陆')

        # driver.switch_to.frame(driver.find_element_by_xpath('//iframe[starts-with(@id, "x-URS-iframe")]'))
        WebDriverWait(driver, 10).until(
            EC.frame_to_be_available_and_switch_to_it((By.XPATH, '//iframe[starts-with(@id, "x-URS-iframe")]')))

        # 填写用户名
        driver.find_element_by_xpath('//input[@name="email"]').send_keys(self.username)

        # 填写密码
        driver.find_element_by_xpath('//input[@name="password"]').send_keys(self.userpassword)

        # 提交
        driver.find_element_by_xpath('//a[@id="dologin"]').click()
        sleep(10)

        # 验证跳转成功
        self.assertEqual(driver.title, '网易邮箱6.0版', '登陆成功')

    def tearDown(self) -> None:
        self.driver.quit()


if __name__ == '__main__':
    unittest.main()

  须要注意的几个问题:web

  1. 这个页面是带有iframe的,须要switch_to进去才能填写用户名,密码,不然找不到。具体的能够自行百度iframe
  2. WebDriverWait里面有一个expectedcondition有一个专门的方法就是判断frame是否available,若是available则switch进去。这个能够提高代码的运行速度。固然是用强制等待后再switch也是没问题的,如图我里面注释掉的代码,也是能够工做的。
  3. 小示例,可是包含的基础知识点很多,包括unittest框架。
相关文章
相关标签/搜索