这是我另一篇博客,详细的介绍了各种浏览器如何安装:
https://blog.csdn.net/qq_43107323/article/details/105423492
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()