selenium

01_入门案例

from selenium import webdriver
import time

# webdriver 获取浏览器的对象
driver = webdriver.Chrome("chromedriver.exe")

# 准备一个网址

# https://www.baidu.com/
url = "https://www.baidu.com/"

driver.get(url)

time.sleep(5)

# 回收资源
driver.quit()

02_元素定位

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

# 更多内容学习于https://www.selenium.dev/zh-cn/documentation/webdriver/elements/finders/#get-element

# webdriver 获取浏览器的对象
driver = webdriver.Chrome("chromedriver.exe")

# 准备一个网址

# https://www.baidu.com/
url = "https://www.baidu.com/"

driver.get(url)

# 1. 查找 元素(标签,标记 节点)  通过id
# driver.find_element(By.ID,'kw').send_keys("美女")
# driver.find_element(By.ID,"su").click()

# 2. 通过name查找元素
# driver.find_element(By.NAME,"wd").send_keys("美女")

# 3. 通过class name
# driver.find_element(By.CLASS_NAME,"s_ipt").send_keys("美女")
# driver.find_element(By.ID,"su").click()

# 4. 定位a标签 link text  partial linktext

# driver.find_element('link text','hao123').click()
# driver.find_element('partial link text','hao123').click()

# 5. 通过css 选择器的方式定位

# driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("美女")
# driver.find_element(By.CSS_SELECTOR,".s_ipt").send_keys("美女")
# driver.find_element(By.CSS_SELECTOR,"[name=wd]").send_keys("美女")
# driver.find_element(By.CSS_SELECTOR,"[value=百度一下]").click()

# 6. 通过xpath的方式进行定位

driver.find_element(By.XPATH,"//*[@id='kw']").send_keys("美女")
driver.find_element(By.XPATH,"//*[@id='su']").click()


time.sleep(5)

# 回收资源
driver.quit()

03_元素操作

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

# webdriver 获取浏览器的对象
driver = webdriver.Chrome("chromedriver.exe")

# 准备一个网址

# https://www.baidu.com/
url = "https://www.baidu.com/"

driver.get(url)

# -------------------------------------------------------------------------------
# 在百度搜索框输入python
driver.find_element(By.ID,"kw").send_keys("python")

time.sleep(3)
# 清除输入的文字
driver.find_element(By.ID,"kw").clear()
# -------------------------------------------------------------------------------

# 搜索框输入美女
driver.find_element(By.ID,"kw").send_keys("美女")
# 点击选中图片
driver.find_element(By.ID,"su").click()
# --------------------------------------------------------------------------------

# 获取元素大小
print(driver.find_element(By.ID,"kw").size)
# 获取元素文本
print(driver.find_element(By.ID,"kw").text)
# 判断元素是否可用
print(driver.find_element(By.ID,"kw").is_enabled())
# 判断元素是否可见
print(driver.find_element(By.ID,"kw").is_displayed())
# 获取属性值
print(driver.find_element(By.XPATH,"//*[text()='新闻']").get_attribute("href"))

time.sleep(5)

# 回收资源
driver.quit()

04_浏览器操作

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

# webdriver 获取浏览器的对象
driver = webdriver.Chrome("chromedriver.exe")

# 准备一个网址

# https://www.baidu.com/
url = "https://www.baidu.com/"

driver.get(url)

# 最大化浏览器
driver.maximize_window()

# 设置浏览器 1920* 1080
# time.sleep(1)
# driver.set_window_size(800,600)
# time.sleep(2)
# driver.set_window_position(200,200)
# print(driver.title)
# print(driver.current_url)
# driver.find_element(By.ID,"kw").send_keys("美女")
# driver.find_element(By.ID,"su").click()

time.sleep(2)
print(driver.title)
print(driver.current_url)
# 浏览器后退
driver.back()
time.sleep(2)
print(driver.title)
print(driver.current_url)
# 浏览器 前进
driver.forward()

time.sleep(2)
print(driver.title)
print(driver.current_url)

# 刷新浏览器
driver.refresh()

time.sleep(2)

driver.back()

driver.find_element(By.XPATH,"//*[text()='hao123']").click()

time.sleep(2)
driver.close()

time.sleep(5)

# 回收资源
driver.quit()

05_元素等待

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# webdriver 获取浏览器的对象
driver = webdriver.Chrome("chromedriver.exe")

# 准备一个网址

# https://www.baidu.com/
url = "https://www.baidu.com/"

driver.get(url)

# 输入框输入要搜索的内容 美女
driver.find_element(By.ID,"kw").send_keys("美女")
# 点击百度一下
driver.find_element(By.ID,"su").click()
# 点击一个搜索到的条目

# 代码的执行速度 远远快与页面的加载速度的
# 在翻页的时候 或者是在加载我们新的页面的时候 需要进行页面等待
# 页面等待的方式有三种:
# 1. 强制等待
# 2. 显式等待
# 3. 隐式等待

# 1. 强制等待
# time.sleep(3)

# 2. 显式等待
# 等待某个元素加载完成  每隔0.5秒去检查一次 最多等待5秒时间
# WebDriverWait(driver,5).until(EC.presence_of_element_located((By.ID,"1")))

# 3. 隐式等待
driver.implicitly_wait(5)
driver.find_element(By.ID,"1").click()

time.sleep(5)

# 回收资源
driver.quit()

06_鼠标操作

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.common.action_chains import ActionChains

# ------------------------------------------------------------------------------------------
# 使用步骤:
# 1. 创建ActionChains对象
# 2. 使用ActionChains对象的方法, 进行操作
#     - context_click()  右击 --> 此方法模拟鼠标右键点击效果
#     - double_click()   双击 --> 此方法模拟鼠标双击效果
#     - drag_and_drop()  拖动 --> 此方法模拟鼠标拖动效果
#     - move_to_element() 悬停 --> 此方法模拟鼠标悬停效果
#     - 其他
# 3. 通过ActionChains"提交"这些操作
#     perform() 执行 --> 此方法用来执行以上所有鼠标方法
# -----------------------------------------------------------------------------------------

# webdriver 获取浏览器的对象
driver = webdriver.Chrome("chromedriver.exe")

# 准备一个网址

# https://www.baidu.com/
# url = "https://www.baidu.com/"

url=r"file:///D:/AA%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/06_selenium/drag.html"

driver.get(url)

time.sleep(2)

action = ActionChains(driver)
# 点击右键
# action.context_click(driver.find_element(By.ID,"su"))

# 悬停
# action.move_to_element(driver.find_element(By.CLASS_NAME,"soutu-btn"))

# 拖拽
action.drag_and_drop(driver.find_element(By.ID,"div1"),driver.find_element(By.ID,"div2"))

# 事件操作必须要执行
action.perform()

time.sleep(5)

# 回收资源
driver.quit()

07_键盘操作

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.common.keys import Keys

# --------------------------------------------------------------------------------
# 方法:  element.send_keys()
# 参数:
#     - 普通字符串
#     - "键盘按键"
# --------------------------------------------------------------------------------

# webdriver 获取浏览器的对象
driver = webdriver.Chrome("chromedriver.exe")

# 准备一个网址

# https://www.baidu.com/
url = "https://www.baidu.com/"

driver.get(url)

el = driver.find_element(By.ID,"kw")

# 输入python
el.send_keys("python")
time.sleep(2)
# 全选
el.send_keys(Keys.CONTROL,"a")
time.sleep(2)
# 删除
el.send_keys(Keys.BACKSPACE)
time.sleep(2)
# 输入美女
el.send_keys("美女")
time.sleep(2)
# 全选
el.send_keys(Keys.CONTROL,"a")
time.sleep(2)
# 复制
el.send_keys(Keys.CONTROL,"c")
time.sleep(2)
# 粘贴
el.send_keys(Keys.CONTROL,"v")
time.sleep(2)

# 回收资源
driver.quit()

08_下拉框

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

# ----------------------------------------------------------------------------------
# 步骤:
#     1. 通过select元素创建出Select对象
#     2. 通过Select对象的方法选中选项
#         i. select_by_index() 根据option索引来定位
#        ii. select_by_value() 根据option属性 value值来定位
#       iii. select_by_visible_text() 根据option显示文本来定位
# ----------------------------------------------------------------------------------

# webdriver 获取浏览器的对象
driver = webdriver.Chrome("chromedriver.exe")

# 准备一个网址

# https://www.baidu.com/
# url = "https://www.baidu.com/"

url = "file:///D:/AA%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/06_selenium/%E6%B3%A8%E5%86%8CA.html"

driver.get(url)

select = Select(driver.find_element(By.ID,"selectA"))
time.sleep(2)

# 选择第三个
select.select_by_index(3)
time.sleep(2)

# 选择北京
select.select_by_value("bj")
time.sleep(2)

# 选择广州
select.select_by_visible_text("A广州")


time.sleep(5)

# 回收资源
driver.quit()

09_页面滚动

from selenium import webdriver
import time

# -----------------------------------------------------------------------------------
# 方法:
#     - 让浏览器执行js代码  driver.execute_script(js代码字符串)
#     - 滚动的js代码
#         - 绝对滚动  window.scrollTo(x,y)
#         - 相对滚动  window.scrollBy(x,y)
# -----------------------------------------------------------------------------------

# webdriver 获取浏览器的对象
driver = webdriver.Chrome("chromedriver.exe")

# 准备一个网址

# https://www.baidu.com/
url = "https://www.toutiao.com/"

driver.get(url)
driver.maximize_window()
time.sleep(2)

js_str="window.scrollTo(0,10000)"

driver.execute_script(js_str)


time.sleep(5)

# 回收资源
driver.quit()

10_警告框

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

# ------------------------------------------------------------------------------------------
# 警告框:
#     就是通过js中的alert, confirm, prompt方法弹出的框, 它会阻挡我们对页面的继续操作.
# 相应方法:
#     1. 获得警告框                                 alert = driver.switch_to.alert
#     2. 关闭警告框: 适用于三种警告框                  alert.dismiss()
#     3. 确认(也会自动关闭): 适用于confirm和prompt     alert.accept()
#     4. 输入文字: 适用于prompt                      alert.send_keys()
#     5. 获得警告框中的文字                           alert.txt
# ------------------------------------------------------------------------------------------

# webdriver 获取浏览器的对象
driver = webdriver.Chrome("chromedriver.exe")

# 准备一个网址

# https://www.baidu.com/
# url = "https://www.baidu.com/"

url = "file:///D:/AA%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/06_selenium/%E6%B3%A8%E5%86%8CA.html"

driver.get(url)

time.sleep(2)
driver.find_element(By.ID,"alerta").click()

# 遇到警告框 切换到警告框 然后操作警告框
alert = driver.switch_to.alert

print(alert.text)
alert.dismiss()

time.sleep(5)

# 回收资源
driver.quit()

11_frame切换

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

# -----------------------------------------------------------------------------------
# 方法:
#     - 切换到"子"Frame   driver.switch_to.frame(frame的名称 或者 id)
#     - 切换到"根"页面     driver.switch_to.default_content()
# -----------------------------------------------------------------------------------

# webdriver 获取浏览器的对象
driver = webdriver.Chrome("chromedriver.exe")

# 准备一个网址
url = "https://mail.qq.com/"

driver.get(url)

time.sleep(2)

print(driver.find_element(By.CLASS_NAME,"login_pictures_title").text)

# 切换frame界面
driver.switch_to.frame("login_frame")

driver.find_element(By.ID,"u").send_keys("100001")

time.sleep(2)
# 切换回原始的页面
driver.switch_to.default_content()

print(driver.find_element(By.ID,"login_pictures_title").text)

time.sleep(5)

# 回收资源
driver.quit()

12_页面切换

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

# ---------------------------------------------------------------------------------------
# 多窗口:
#     一个浏览器程序, 可以打开多个页面, 每个网页构成了浏览器的一个"标签".
#     有些超链接是_target = 'blank '的, 会在新窗口打开, 会出现窗口切换的事情.
# 概念:
#     handler意为控制者/处理者, 但不是真正地处理对象(可以想象为皮影戏的操作杆)
#     在selenium中, 通过一个随机生成的字符串(uuid)来唯一标识某个窗口
# handler的获取:
#     - 获取所有:  driver.window_handles
#     - 获取单个:  driver.current_window_handle
#     - 切换:     driver.switch_to.window(handle)
# ---------------------------------------------------------------------------------------

# webdriver 获取浏览器的对象
driver = webdriver.Chrome("chromedriver.exe")

# 准备一个网址
url = "https://www.baidu.com/"

driver.get(url)
# 最大化屏幕
driver.maximize_window()

time.sleep(2)

print(driver.window_handles)
print(driver.current_window_handle)

driver.find_element(By.ID,"kw").send_keys("美女")
driver.find_element(By.ID,"su").click()

time.sleep(2)
driver.find_element(By.ID,"1").click()

time.sleep(2)
print(driver.window_handles)
print(driver.current_window_handle)

# driver.close()
# 切换页面   获取当前 handle  获取所有的handle  新打开的页面在所有handle 列表的最后面
driver.switch_to.window(driver.window_handles[1])

driver.find_element(By.ID,"currentImg").click()

time.sleep(1)
driver.get_screenshot_as_file("img.png")


time.sleep(5)

# 回收资源
driver.quit()

13_cookies

import time
from selenium import webdriver

# -----------------------------------------------------------------------------------------
# 登录验证码处理:
#     - 验证码介绍:
#         有些登录功能, 为了避免机器操作, 会添加验证码
#     - 形式:
#         字母数字, 旋转图像, 拖动滑块...
#     - 应对处理:
#         - 去掉验证码     测试环境下采用
#         - 设置万能验证码  生产环境采用
#         - 验证码识别技术  通过Python-tesseract来识别图片类型验证码; 识别率很难达到100%
#         - 使用打码平台    测试其他外部网站需要, 此项服务需要付费
#         - 记录cookie    通过记录cookie跳过登录(推荐)
# cookie的处理:
#     - 概念:
#         浏览器和服务器通过cookie头机制, 可以形成状态保持
#     - 方法:
#         - 获取本网站所有本地cookie get_cookies()
#             返回的是列表套字典, 字典的键有: domain, expiry, httpOnly, name, path, secure, value
#         - 获取指定cookie get_cookie(name)返回的是一个字典, 键同上
#         - 添加cookie add_cookie()参数是一个字典, 主要的键是 name value
# ---------------------------------------------------------------------------------------------

driver = webdriver.Chrome('./chromedriver.exe')
driver.get("https://www.baidu.com")

driver.maximize_window()
time.sleep(5)
driver.add_cookie({"name":'BDUSS',"value":'hmbnVJcVRrSmhsQ2x3ZmNtU2tOU2JoWTk3LTZ2S2N0U344c3diQ3VaaUhVeDVoRVFBQUFBJCQAAAAAAAAAAAEAAABZRiExscy~1bOkQUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIfG9mCHxvZga2'})
driver.add_cookie({"name":'BAIDUID',"value":'FDFC551F4996E833951190E1A32018E2'})
time.sleep(5)
driver.refresh()
time.sleep(5)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值