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框架。
相關文章
相關標籤/搜索