1、浏览器驱动对象
from selenium import webdriver
# 创建一个浏览器对象
driver = webdriver.Firefox()
# 设置浏览器全屏
driver.maximize_window()
# 获取当前浏览器尺寸
size = driver.get_window_size()
print(size)
# 设置浏览器尺寸
driver.set_window_size(400, 400)
size = driver.set_window_size(400, 400)
print(size)
# 获取浏览器位置
position = driver.get_window_position()
print(position)
# 设置浏览器位置
driver.set_window_position(200, 300)
2、页面操作
from selenium import webdriver
import time
# 创建一个浏览器对象
driver = webdriver.Firefox()
# 访问百度
url1 = "http://www.baidu.com"
driver.get(url1)
print("欢迎来到:", url1)
# 访问知乎
url2 = "https://zhuanlan.zhihu.com"
time.sleep(2)
driver.get(url2)
print("欢迎来到:", url2)
# 后退
time.sleep(2)
driver.back()
print("回退到", url1)
# 前进到
time.sleep(2)
driver.forward()
print("前进到:", url2)
driver.close()
3、断言操作
①
from selenium import webdriver
import time
# 创建一个浏览器对象
driver = webdriver.Firefox()
# 访问百度
url1 = "http://www.baidu.com"
driver.get(url1)
print("欢迎来到:", driver.current_url)
# 访问知乎
url2 = "https://zhuanlan.zhihu.com"
time.sleep(2)
driver.get(url2)
print("欢迎来到:", driver.current_url)
# 后退
time.sleep(2)
driver.back()
print("回退到", driver.current_url)
# 前进到
time.sleep(2)
driver.forward()
print("前进到:",driver.current_url)
driver.close()
②
from selenium import webdriver
# 创建一个浏览器对象
driver = webdriver.Firefox()
# 访问新浪
url = "http://www.sina.com.cn"
driver.get(url)
# 显示当前的url
print(driver.current_url)
# 显示当前页面的标题
print(driver.title)
# 保存快照操作
driver.get_screenshot_as_file("xinlang.png")
str数据类型(data)转换成bytes(二进制类型)
b_data=data.encode()
data=b_data.decode()
③
from selenium import webdriver
import time
# 创建一个浏览器对象
driver = webdriver.Firefox()
# 访问百度
url = "http://www.baidu.com"
driver.get(url)
# 定位搜索框
el = driver.find_element_by_id("kw")
# print(el)
# print(type(el))
# 向输入框输入数据
el.send_keys("传智播客")
# 定位百度一下按钮
el_click = driver.find_element_by_id("su")
el_click.click()
time.sleep(3)
driver.close()
4、selenium 8种定位操作
①
通过id值进行定位
# 通过id值进行定位
driver.find_element_by_id()
②
通过name值进行定位
# 通过name值进行定位
driver.find_element_by_name()
例:
from selenium import webdriver
# 创建一个浏览器
driver = webdriver.Firefox()
# 打开人人网
url = "http://www.renren.com/"
driver.get(url)
# 定位到输入框
el_1 = driver.find_element_by_name("email")
# 输入账号
el_1.send_keys("15332093562")
# 定位到密码框
el_pwd = driver.find_element_by_name("password")
# 输入密码
el_pwd.send_keys("wo249821")
# 定位登录按钮
el_click = driver.find_element_by_id("login")
# 点击操作
el_click.click()
③
通过class值进行定位
# 通过class值进行定位
driver.find_element_by_class_name()
④
通过标签名进行定位,该元素要么唯一,要么第一位
# 通过标签名进行定位,该元素要么唯一,要么第一位
driver.find_element_by_tag_name()
⑤
通过链接文本进行定位
# 通过链接文本进行定位
river.find_element_by_link_text()
⑥
通过部分链接文本进行定位
# 通过部分链接文本进行定位
driver.find_element_by_partial_link_text()
⑦
通过xpath进行定位
# 通过xpath进行定位
driver.find_element_by_xpath()
⑧
通过css选择器进行定位
# 通过css选择器进行定位
driver.find_element_by_css_selector()
5、定位一组元素
driver.find_elements_by_css_selector()
6、元素的操作
输入数据
element.send_keys()
提交
element.submit()
清除
element.clear()
获取文本内容
element.text()
获取属性值
element_get_attribute()
7、多标签切换
例:
from selenium import webdriver
# 创建一个浏览器对象
driver = webdriver.Firefox()
# 访问58
url = "https://tj.58.com/"
driver.get(url)
el = driver.find_element_by_link_text("租房")
# 打印当前浏览器句柄
print("点击之前的浏览器身份证列表是:", driver.window_handles)
print("点击之前的浏览器窗口是:", driver.current_url)
el.click()
print("点击之后的浏览器身份证列表是:", driver.window_handles)
print("点击之后的浏览器窗口是:", driver.current_url)
8、多表单多框架的切换
# 定位表单
el_frame = driver.find_element_by_name("")
# 切换到表单
driver.switch_to.frame(el_frame)
9、本地加载-表单切换
学习内容:
driver.switch_to.frame() 切换表单
driver.switch_to.default_content() 切换到最外层表单
driver.switch_to.parent_frame() 切换到上一层 表单
例如:
# 导包
from selenium import webdriver
# 导入os库,用于获取文件路径
import os
import time
# 创建浏览器
driver = webdriver.Firefox()
# 获取网页访问路径,os.path.abspath(文件名)获取文件的绝对路径
file_path = 'file:///' + os.path.abspath('example_frame.html')
print(file_path)
# 访问本地文件
driver.get(file_path)
time.sleep(5)
# 切换到第一个表单中
driver.switch_to.frame('itcast_frame1')
# 切换到第二层表单
driver.switch_to.frame('itcast_frame2')
# 定位到输入框
el = driver.find_element_by_id('sb_form_q')
# 输入
el.send_keys('selenium')
# 定位点击按钮
el_sub = driver.find_element_by_id('sb_form_go')
el_sub.click()
# 定位一个元素,验证已经到达深层表单
el_search = driver.find_element_by_id('sb_form')
print('依然在最深层表单中')
driver.switch_to.default_content()
try:
el_search = driver.find_element_by_id('sb_form')
except:
print('已经从表单中退出')
10、鼠标右键操作
先导入:from selenium.webdriver import ActionChains
ActionChains(driver).context_click(定位到的元素).perform()
例:
from selenium import webdriver
# 导入动作链类
from selenium.webdriver import ActionChains
# 打开浏览器
driver = webdriver.Firefox()
url = "https://www.baidu.com/"
driver.get(url)
# 定位图片位置
el_pic = driver.find_element_by_css_selector("#lg > map:nth-child(3) > area:nth-child(1)")
ActionChains(driver).context_click(el_pic).perform()
11、鼠标双击
先导入:from selenium.webdriver import ActionChains
ActionChains(driver).double_click(定位到的元素).perform()
12、鼠标悬停
先导入:from selenium.webdriver import ActionChains
ActionChains(driver).move_to_element(定位到的元素).perform()
例如:
from selenium import webdriver
# 导入动作链类
from selenium.webdriver import ActionChains
import time
# 开一个浏览器
driver = webdriver.Firefox()
driver.maximize_window()
# 访问京东
url = 'http://www.jd.com'
driver.get(url)
# 获取分类组元素
el_list = driver.find_elements_by_class_name('cate_menu_item')
for el in el_list:
ActionChains(driver).move_to_element(el).perform()
time.sleep(1)
driver.quit()
13、键盘操作
先导入:from selenium.webdriver.common.keys import Keys
send_keys(Keys.CONTROL,"a")
send_keys(Keys.CONTROL,"c")
send_keys(Keys.CONTROL,"x")
send_keys(Keys.CONTROL,"v")
14、弹出框操作,警告框操作
进入警告框并接受
driver.switch_to.alert.accept()
进入警告框并解散
driver.switch_to.alert.dismiss()
15、下拉框
先导入:
from selenium.webdriver.support.select import Select
创建Select对象
selsub = Select(定位到的元素)
selsub.select_by_index(0)
selsub.select_by_value()
selsub.select_by_visible_text()
# 查看第一个已选
selsub.first_selected_option
# 查看所有已选
selsub.all_selected_options
# 查看是否多选
selsub.is_multiple
16、js滚动
第一种方法:
# js滚动,x管水平,y管垂直
js = "window.scrollTo(0,1000)"
driver.execute_script(js)
第二种方法:
js1= "var q=document.documentElement.scrollTop=0"
driver.execute_script(js1)
一直往下拉:
for i in range(100):
# x管水平,y管垂直
js = 'window.scrollTo(0,%s)'%(i*100)
driver.execute_script(js)
time.sleep(0.5)
17、显式等待
from selenium import webdriver
# 导入By
from selenium.webdriver.common.by import By
# 导入webdriver等待类
from selenium.webdriver.support.ui import WebDriverWait
# 导入预期条件设置类
from selenium.webdriver.support import expected_conditions as EC
# 创建一个浏览器
driver = webdriver.Firefox()
# 访问百度
url = 'http://www.baidu.com'
driver.get(url)
# 浏览器总共等待10秒,在10秒内,每隔0.5秒去使用id的方式定位一下元素,如果定位到,就结束等待,如果定位不到同时没有大于10秒,则继续等待
el = WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.ID,'lg')))
18、隐式等待
from selenium import webdriver
# 创建浏览器
driver = webdriver.Firefox()
url = 'https://www.amazon.cn/'
driver.get(url)
driver.implicitly_wait(20)
driver.close()
优先隐式等待,显式等待次之,最后固定等待
19、cookies
from selenium import webdriver
# 创建浏览器
driver = webdriver.Firefox()
# 访问有道
url = 'http://www.youdao.com/'
driver.get(url)
# 获取cookies,直接调用,不需要参数
data = driver.get_cookies()
print(data)
# 删除所有cookies
driver.delete_all_cookies()
# 设置cookies
cookie = {"name":"itcast","value":"soft_test"}
driver.add_cookie(cookie)
# 获取
data1 = driver.get_cookies()
print(data1)