一、先安裝selenium驅動或者插件
這是我另一篇博客,詳細的介紹了各種瀏覽器如何安裝:
https://blog.csdn.net/qq_43107323/article/details/105423492
二、編寫Python代碼;我這裏是網上最全的元素定位
from selenium import webdriver
import time
dr = webdriver.Chrome()
# 打開登陸163郵箱的網頁
dr.get('http://mail.163.com/')
# 將瀏覽器窗口最大化
dr.maximize_window()
# 1、id
btn = dr.find_element_by_id('lbNormal').click()
# 2、找到郵箱賬號登錄框對應的iframe #跳入框架
# 1、xpath 絕對路徑
dr.switch_to.frame(dr.find_element_by_xpath("/html/body/div[2]/div[3]/div/div[3]/div[4]/div[1]/div/iframe")) # 跳入框架
# 2、xpath 相對路徑 有些變化的不適合用
# dr.switch_to.frame(dr.find_element_by_xpath('//*[@id="x-URS-iframe1587572206248.1785"]'))
# 3、使用元素名+屬性值 常用的
# dr.switch_to.frame(dr.find_element_by_xpath("//*[@frameborder='0']"))
# 4、使用元素名+包含部分屬性值
# dr.find_element_by_xpath("//*[contains(@name,'email')]").send_keys('123456789') #獲取手機號輸入框
# 5、通過元素名+元素的文本內容 獲取超鏈接,注意空格 不建議用
# dr.find_element_by_xpath("//*[text()='忘記密碼?']").click()
# 6、通過元素名定位 獲取頁面所有的input元素 和 tag_name 差不多;僅限第一個元素
# driver.find_element_by_xpath('//input').send_keys("666888")
# 7、 通過元素名+索引定位
# driver.find_element_by_xpath('//div[1]/input').send_keys("666888")
# 3、name
dr.find_element_by_name('email').send_keys('15890501589')
# 4、使用tag_name 標籤名
# dr.find_element_by_tag_name('input').send_keys('15890501589')
# 找到密碼輸入框 輸入自己的郵箱密碼
# 5、class_name 如果有空格,可以用空格前 中間 後面的部分,但是這些屬性值是唯一的
dr.find_element_by_class_name('dlpwd').send_keys('123456')
# 找到登陸按鈕
dr.find_element_by_id('dologin').click()
dr.implicitly_wait(3) # 智能等待
# 錯誤的密碼
false_password = dr.find_element_by_class_name("ferrorhead").text
if false_password == '帳號或密碼錯誤' :
print(false_password)
# 清除按鈕
dr.find_element_by_xpath('/html/body/div[2]/div[2]/div[2]/form/div/div[3]/div[3]/div').click()
else :
print('密碼正確')
# 斷言
dr.switch_to.default_content() # 跳出框架
dr.implicitly_wait(2) # 智能等待
real_result = dr.find_element_by_class_name('nui-tree-item-text').text
print(real_result)
if real_result == "收件箱":
print('登錄成功')
else:
print('執行失敗')
dr.implicitly_wait(2) # 智能等待
# 6、link_text 超鏈接內容
dr.find_element_by_link_text('升級VIP').click()
# 7、partial_link_text 部分文本
dr.find_element_by_partial_link_text('VIP').click()
# css_selector
# 1、css_selector id #表示
# dr.find_element_by_css_selector('#lbNormal').click()
# 2、標籤+id
# dr.find_element_by_css_selector('div#lbNormal').click()
# # 3、classname .表示
# # dr.find_element_by_css_selector('.nui-tree-item-text').click()
# # 4、標籤+classname .表示
# dr.find_element_by_css_selector('span.nui-tree-item-text').click()
# # 5、標籤+屬性和屬性值
# btn = dr.find_element_by_css_selector("span[title='收件箱']").click()
#
# # 6、表籤+屬性和屬性值的方式: 模糊匹配
# # 1、匹配屬性值的前部分^
# dr.find_element_by_css_selector("span[title^='收']").click()
# # 2、匹配屬性值的前部分*
# dr.find_element_by_css_selector("span[title^='件']").click()
# # 3、匹配屬性值的後部分$
# dr.find_element_by_css_selector("span[title^='箱']").click()
#
# # 7、子孫元素方式(和xpath路徑類似)
# dr.find_element_by_css_selector("div#dvNavTree>ul>li>div").click()
# dr.find_element_by_css_selector("div#dvNavTree div").click()
# 8、句柄 頁面的唯一標識,相當於頁面的省份證號
dr.find_element_by_link_text("升級VIP").click()
print("當前頁面的title", dr.title)
print("當前頁面的句柄", dr.current_window_handle) # 打印當前的句柄
list_handle = dr.window_handles # 獲取所有的句柄 2個句柄
print(type(list_handle))
print(list_handle)
# dr.switch_to_window(list_handle[1])
for handle in list_handle:
if handle != dr.current_window_handle:
dr.switch_to_window(handle)
print("當前頁面的title", dr.title)
print("當前頁面的句柄", dr.current_window_handle)
# time.sleep(3)
# dr.quit()