【笔记】Selenium基础知识

元素定位

1. 通过元素id进行定位
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

# 打开谷歌浏览器
driver = webdriver.Chrome()
# 在浏览器中输入网址
driver.get("http://www.holyshop.com/")
# 将浏览器窗口最大化
driver.maximize_window()
# 定位页面元素为keyword的输入框,并且清空默认的内容
driver.find_element(By.ID,"keyword").clear()
# 定位页面元素为keyword的输入框,并且输入内容【启动】
driver.find_element(By.ID,"keyword").send_keys("启动")
# 休眠等待3秒
sleep(3)
# 关闭浏览器和驱动
driver.quit()
2. 通过name元素进行定位
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

# 打开谷歌浏览器
driver = webdriver.Chrome()
# 在浏览器中输入网址
driver.get("http://www.holyshop.com/")
# 将浏览器窗口最大化
driver.maximize_window()
# 定位页面元素为keywords的输入框,并且清空默认的内容
driver.find_element(By.NAME,"keywords").clear()
# 定位页面元素为keywords的输入框,并且输入内容【启动】
driver.find_element(By.NAME,"keywords").send_keys("启动")
# 休眠等待3秒
sleep(3)
# 关闭浏览器和驱动
driver.quit()
3. 通过元素class进行定位
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

# 打开谷歌浏览器
driver = webdriver.Chrome()
# 在浏览器中输入网址
driver.get("http://www.holyshop.com/")
# 将浏览器窗口最大化
driver.maximize_window()
# 定位页面元素为indexw_header_input_text的输入框,并且清空默认的内容
driver.find_element(By.CLASS_NAME,"indexw_header_input_text").clear()
# 定位页面元素为indexw_header_input_text的输入框,并且输入内容【启动】
driver.find_element(By.CLASS_NAME,"indexw_header_input_text").send_keys("启动")
# 休眠等待3秒
sleep(3)
# 关闭浏览器和驱动
driver.quit()
4. 通过tag标签名进行定位
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

# 打开谷歌浏览器
driver = webdriver.Chrome()
# 在浏览器中输入网址
driver.get("http://www.holyshop.com/")
# 将浏览器窗口最大化
driver.maximize_window()
# 定位页面input标签,并且清空默认的内容
driver.find_element(By.TAG_NAME,"input").clear()
# 定位页面input标签,并且输入内容【启动】
driver.find_element(By.TAG_NAME,"input").send_keys("启动")
# 休眠等待3秒
sleep(3)
# 关闭浏览器和驱动
driver.quit()
5. 通过link_text进行定位
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

# 打开谷歌浏览器
driver = webdriver.Chrome()
# 在浏览器中输入网址
driver.get("http://www.holyshop.com/")
# 将浏览器窗口最大化
driver.maximize_window()
# 点击页面中【我的账户】链接
driver.find_element(By.LINK_TEXT,"我的账户").click()
# 休眠等待3秒
sleep(3)
# 关闭浏览器和驱动
driver.quit()
6. 通过partial_link_text进行定位
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

# 打开谷歌浏览器
driver = webdriver.Chrome()
# 在浏览器中输入网址
driver.get("http://www.holyshop.com/")
# 将浏览器窗口最大化
driver.maximize_window()
# 点击页面中【我的账户】链接
driver.find_element(By.PARTIAL_LINK_TEXT,"账户").click()
# 休眠等待3秒
sleep(3)
# 关闭浏览器和驱动
driver.quit()
7. 通过XPATH进行定位
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

# 打开谷歌浏览器
driver = webdriver.Chrome()
# 在浏览器中输入网址
driver.get("http://www.holyshop.com/")
# 将浏览器窗口最大化
driver.maximize_window()
# 通过xpath相对路径进行定位,清空输入框的默认值
driver.find_element(By.XPATH,"//input[@id='keyword']").clear()
# 通过xpath相对路径进行定位,输入【测】
driver.find_element(By.XPATH,"//input[@id='keyword']").send_keys("测")
# 通过xpath绝对路径进行定位,输入【试】
driver.find_element(By.XPATH,"/html/body/div/div[2]/div[2]/div[3]/div/div/form/input").send_keys("试")
# 通过xpath相对路径找父级标签,然后再找子标签,输入【查】
driver.find_element(By.XPATH,"//form[@id='searchForm']/input").send_keys("查")
# 通过xpath找自身元素的其他属性,输入【询】
driver.find_element(By.XPATH,"//input[@type='text']").send_keys("询")
# 通过xpath找多个元素同时成立,输入【功能】
driver.find_element(By.XPATH,"//input[@type='text' and @value='戒托']").send_keys("功能")
# 休眠等待3秒
sleep(5)
# 关闭浏览器和驱动
driver.quit()
8. 通过css进行定位
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

# 打开谷歌浏览器
driver = webdriver.Chrome()
# 在浏览器中输入网址
driver.get("http://www.holyshop.com/")
# 将浏览器窗口最大化
driver.maximize_window()
# 通过css进行定位页面元素,#表示id的属性,清空搜索框的默认值
driver.find_element(By.CSS_SELECTOR, "#keyword").clear()
# 通过css进行定位页面元素,.表示class的属性,输入【软】
driver.find_element(By.CSS_SELECTOR, ".indexw_header_input_text").send_keys("软")
# 通过css自身元素进行定位,输入【件】
driver.find_element(By.CSS_SELECTOR, '[type="text"]').send_keys("件")
# 通过css找父级元素,然后再找子元素,输入【测】
driver.find_element(By.CSS_SELECTOR, '#searchForm>input#keyword').send_keys("测")
# 通过自身多个元素同时成立,进行定位,输入【试】
driver.find_element(By.CSS_SELECTOR, '[type="text"],[value="戒托"]').send_keys("试")
# 休眠等待3秒
sleep(5)
# 关闭浏览器和驱动
driver.quit()

selenium三种断言方式

from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

driver = webdriver.Chrome()
driver.get("http://www.holyshop.com/user.php")
driver.maximize_window()
# 登录页面输入用户名和密码点击登录按钮
driver.find_element(By.NAME,"username").send_keys("holy1")
driver.find_element(By.NAME,"password").send_keys("123456")
driver.find_element(By.NAME,"submit").click()
sleep(3)    # 强制等待3秒
# 获取元素的文本值
text = driver.find_element(By.XPATH,"//font[@id='ECS_MEMBERZONE']/a[2]").text
# 获取当前网址
url = driver.current_url
# 获取当前网站的title信息
title = driver.title

# 通过文本值进行断言,这种方法使用最多
if "退出" == text:
    print("使用文本进行断言,登录成功")
else:
    print("登录失败")

# 通过url进行断言,selenium提供了这个方法,但是一般不用
if url == "http://www.holyshop.com/user.php":
    print("使用url进行断言,登录成功")
else:
    print("登录失败")

# 通过title进行断言,selenium提供了这个方法,但是一般不用
if title == "用户中心_HOLYSHOP演示站 - Powered by HOLYShop":
    print("使用title进行断言,登录成功")
else:
    print("登录失败")

driver.quit()

获取页面元素的属性和尺寸

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("http://www.holyshop.com/user.php")
driver.maximize_window()
# 获取元素在页面中的高和宽
size = driver.find_element(By.NAME,"username").size
print(size)
# 获取定位的页面元素其他的属性值
attribute = driver.find_element(By.NAME,"username").get_attribute("class")
print(attribute)
driver.quit()

selenium 等待

from selenium import webdriver
from selenium.webdriver.common.by import By
from time import *

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.maximize_window()    # 窗口最大化
driver.implicitly_wait(30)  # 全局等待
print("开始全局等待",ctime())
try:
    # 故意写错元素,验证全局等待功能
    driver.find_element(By.ID,"kw1").send_keys("迪迦凹凸曼")
except Exception as e:
    print(e)
print("结束全局等待",ctime())
driver.find_element(By.ID,"kw").send_keys("宇智波鼬")
print("开始强制等待",ctime())
sleep(3)
print("结束强制等待",ctime())
driver.quit()

窗口切换

from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

# 案例一
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.maximize_window()    # 窗口最大化
driver.implicitly_wait(5)  # 全局等待
# 点击百度首页的新闻链接
driver.find_element(By.LINK_TEXT,"新闻").click()
# 获取当前浏览器打开的所有窗口
handles = driver.window_handles
# 切换只第2个窗口
driver.switch_to.window(handles[1])
# 点击新闻页面中的【看中国】链接
driver.find_element(By.LINK_TEXT,"看中国").click()
# 切换至第1个窗口
driver.switch_to.window(handles[0])
# 在第一个窗口中输入宇智波鼬
driver.find_element(By.ID,"kw").send_keys("宇智波鼬")
sleep(2)
driver.quit()

# 案例二
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(r'https://www.baidu.com')
driver.find_element('xpath', '//a[text()="新闻"]').click()
handles = driver.window_handles     # 获取所有的句柄
print(handles)
driver.switch_to.window(handles[-1])    # 切换句柄
driver.find_element('xpath', '//*[@id="header-link-wrapper"]/li[5]/a').click()   # 点击体育
sleep(2)
driver.switch_to.window(handles[0])    # 切换回第一个句柄
sleep(2)
driver.close()      # 关闭掉第一个句柄
sleep(2)
driver.switch_to.window(handles[-1])    # 关闭后再切换回来
sleep(2)
driver.find_element('xpath', '//*[@id="pane-news"]/div/ul/li[2]/strong/a[2]/b').click()  # 点击链接
sleep(2)
handles2 = driver.window_handles     # 重新获取所有句柄
print(handles2)
driver.switch_to.window(handles2[-1])        # 切换到最后一个页签
driver.close()      # 关闭掉这个切换的页签

driver.switch_to.window(handles2[0])
sleep(2)
driver.back()
sleep(2)
driver.forward()
sleep(2)
driver.refresh()
sleep(2)
driver.quit()

滑动进度条

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://www.sina.com.cn")
driver.maximize_window()
driver.implicitly_wait(5)
# 向下滑动到页面指定位置,有时候页面内容过长需要滑动到指定的位置,才能定位
scroll_to_down = 'window.scrollTo(0,2000)'
driver.execute_script(scroll_to_down)
# 设置浏览器的尺寸
driver.set_window_size(600,800)
# 向右滑动到指定页面位置,一无是处,基本不用
scroll_to_right = 'window.scrollTo(1000,0)'
driver.execute_script(scroll_to_right)
driver.quit()

操作弹框

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("file:///D:/Program%20Files/Project/Review561/Selenium%E5%A4%8D%E4%B9%A0/html/alert.html")
driver.maximize_window()
# 点击页面中的第一种弹窗
driver.find_element(By.XPATH,"/html/body/div/button[1]/h3").click()
# 点击弹窗中的确定按钮
driver.switch_to.alert.accept()
# 点击页面中的第二种弹窗
driver.find_element(By.XPATH,"/html/body/div/button[2]/h3").click()
# 在弹窗的输入框中输入你好!
driver.switch_to.alert.send_keys("你好!")
# 点击确定按钮
driver.switch_to.alert.accept()
# 再次点击确定按钮
driver.switch_to.alert.accept()
# 点击页面中的第三种弹窗
driver.find_element(By.XPATH,"/html/body/div/button[3]/h3").click()
# 点击页面的取消按钮
driver.switch_to.alert.dismiss()
driver.quit()

下拉框操作

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from time import sleep

driver = webdriver.Chrome()
driver.get("http://www.holyshop.com/user.php")
driver.maximize_window()
driver.implicitly_wait(10)
# 登录操作
driver.find_element(By.NAME,"username").send_keys("holy1")
driver.find_element(By.NAME,"password").send_keys("123456")
driver.find_element(By.NAME,"submit").click()
driver.find_element(By.LINK_TEXT,"我的账户").click()
driver.find_element(By.LINK_TEXT,"收货地址").click()
# 通过直接定位方式
driver.find_element(By.ID,"selProvinces_0").send_keys("广东省")
# 通过Select类库进行定位,先定位下拉框,然后对下拉框内容可以通过三种方式操作
city = driver.find_element(By.ID,"selCities_0")
# 使用Select类库,通过value选择下拉框中的内容
Select(city).select_by_value("233")     # 通过value的属性值定位深圳市
sleep(2)
Select(city).select_by_visible_text("河源市")  # 通过文本值定位河源市
sleep(2)
Select(city).select_by_index(1)   # 通过索引值定位广州市
driver.quit()

frame框架的切换

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://mail.qq.com/")
driver.maximize_window()
driver.implicitly_wait(5)
# 切换至login的frame框架中
driver.switch_to.frame("login_frame")
# 切入框架后,才能定位使用账号密码登录
driver.find_element(By.ID,"switcher_plogin").click()
# 输入qq号码
driver.find_element(By.ID,"u").send_keys("902123036")
# 退出之前进入的login的frame
driver.switch_to.default_content()
# 切换至微信登录
driver.find_element(By.ID,"wxLoginTab").click()
driver.quit()

操作隐藏元素

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("file:///D:/Program%20Files/Project/Review561/Selenium%E5%A4%8D%E4%B9%A0/html/Hidden.html")
driver.maximize_window()
# 检查页面元素是否通过程序可见,返回True表示可见,可以直接定位,返回False无法直接定位
e = driver.find_element(By.ID,"username").is_displayed()
# 调用js修改页面元素的显示样式
js = "document.getElementById('username').style='block'"
driver.execute_script(js)
# 修改js后,可以直接定位
driver.find_element(By.ID,"username").send_keys("holy")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值