Skip to content
🗂️ 文章分类: Python  
🏷️ 文章标签: Python  
📝 文章创建时间: 2024-05-18
🔥 文章最后更新时间:暂无

[toc]

Python使用selenium库笔记

selenium 是一个用于 Web 应用程序的自动化测试工具 , 能够通过代码完全模拟人使用浏览器自动访问目标站点并操作。常用于网站的自动化测试。

selenium 本质上是通过驱动浏览器,彻底模拟浏览器的操作,好比跳转、输入、点击、下拉等,然后拿到网页渲染之后的结果。

python有一个 selenium 第三方库。从而可以很方便的通过python语言来使用selenium。

安装

安装 selenium 库

bash
pip install selenium

Selenium的基本使用

py
# 导入selenium库的webdriver类
from selenium import webdriver
# 创建Edge浏览器操作对象
browser = webdriver.Edge()
# 网站链接
url = 'https://www.baidu.com'
# 访问网站
browser.get(url)
# 关闭浏览器
browser.close()

如图所示,运行代码,会自动打开浏览器,加载目标网址。 python_20240518230359.png

Selenium的元素操作

如何通过selenium来操作HTML文件中的某个元素。

  1. 首先需要找到该元素,进行元素定位
  2. 获取元素的各个属性数据
  3. 对元素进行交互(模拟操作)

Selenium的进行元素定位

根据标签 id 获取元素

py
from selenium import webdriver
from selenium.webdriver.common.by import By
browser = webdriver.Edge()
url = 'https://www.baidu.com'
browser.get(url)

# 根据标签 id 获取元素
button = browser.find_element(By.ID, 'head')
print(button)

# 通过标签id属性进行定位
button = browser.find_element_by_id('head')
print(button)

根据标签 name 属性的值获取元素

py
button = browser.find_element(By.NAME, 'bsToken')
print(button)

# 通过标签name属性进行定位
button = browser.find_element_by_name('bsToken')
print(button)

根据 class 属性获取元素

py
button = browser.find_element(By.CLASS_NAME, 'wrapper_new')
print(button)

# 通过class名称进行定位
button = browser.find_elements_by_class_name('wrapper_new')
print(button)

根据标签名获取元素

py
button = browser.find_elements(By.TAG_NAME, 'input')
print(button)

# 通过标签名称进行定位
button = browser.find_element_by_tag_name('input')
print(button)

根据标签的文本获取元素(精确定位)

py
button = browser.find_elements(By.LINK_TEXT, '地图')
print(button)

# 通过搜索 页面中 链接进行定位
browser.find_element_by_link_text("地图")

根据标签的文本获取元素(模糊定位)

py
button = browser.find_elements(By.PARTIAL_LINK_TEXT, '地')
print(button)

Selenium的获取元素的各种信息

当我们定位到元素之后,我们还需要获取元素的属性之后,才能进行元素操作。

selenium 给我们提供了获取元素不同信息的方法。

获取元素的属性

py
from selenium import webdriver
from selenium.webdriver.common.by import By
browser = webdriver.Edge()
url = 'https://www.baidu.com'
browser.get(url)

# 获取元素的class属性
button = browser.find_element(By.ID, 'su')
print(button.get_attribute('class'))

获取元素标签名

py
input = browser.find_element(By.ID, 'su')
print(input.tag_name)

获取元素文本值

py
input = browser.find_element(By.ID, 'su')
print(input.text)

获取元素位置

py
input = browser.find_element(By.ID, 'su')
print(input.location)

获取元素大小

py
input = browser.find_element(By.ID, 'su')
print(input.size)

Selenium元素交互

交互指的是我们平时在浏览器上的各种操作,比如输入文本、点击链接、回车、下拉框等。

输入文本和清除文本

py
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
browser = webdriver.Edge()
url = 'https://www.baidu.com'
browser.get(url)

# 定位到输入框元素
input = browser.find_element(By.ID, 'kw')
# 给输入框输入文本值
input.send_keys('selenium')

# 暂停5秒
time.sleep(5)

# 清除输入框的文本值
input.clear()

# 关闭浏览器
browser.close()

模拟点击

py
# 定位到百度一下的按钮元素
button = browser.find_element(By.ID, 'su')
# 点击按钮
button.click()

回车确认

py
# 定位到输入框元素
input = browser.find_element(By.ID, 'kw')
# 给输入框输入文本值
input.send_keys('selenium')
# 回车查询
input.submit()

Selenium 执行JS代码

我们也可以通过selenium来执行js代码。

py
import time
from selenium import webdriver
browser = webdriver.Edge()
url = 'https://www.baidu.com'
browser.get(url)

# js代码
js_bottom = "alert('this is js message')"
# 执行这段js代码,实现消息弹窗
browser.execute_script(js_bottom)

# 休眠5秒,从而能看到消息弹窗。否则程序结束,浏览器就自动关闭了
time.sleep(5)

python_20240518234132.png

Selenium加载本地的html文件

在上面的例子中,我们可以通过网址来加载网页。我们也可以通过本地的html文件,来加载本地的网页。

py
import time
from selenium import webdriver
browser = webdriver.Edge()
html_file_path = "C:\\Users\\86182\\Desktop\\a.html"
browser.get(html_file_path)

# js代码
js_bottom = "alert('this is js message')"
# 执行这段js代码,实现下拉进度条,页面滑动的效果
browser.execute_script(js_bottom)

# 执行html文件中的decode方法,并传入参数 data_info
data_info = "aaaa"
browser.execute_script("return decode(" + data_info + ");")

time.sleep(5)

Selenium的自定义设置

在某些情况下,我们通过Selenium获取到浏览器对象的时候,可以设置一些自定义配置。

py
import time
from selenium import webdriver

# Selenium获取到Edge浏览器设置选项
options = webdriver.EdgeOptions()

# 指定浏览器分辨率
options.add_argument('window-size=1920x3000')

# 隐藏浏览器滚动条, 应对一些特殊页面
options.add_argument('--hide-scrollbars')

# 设置浏览器编码格式
options.add_argument('lang=zh_CN.UTF-8')

# 浏览器启动时最大化窗口
options.add_argument('--start-maximized')

# 浏览器不加载图片, 提升浏览器的速度
options.add_argument('blink-settings=imagesEnabled=false')

# 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
options.add_argument('--headless')

# 谷歌浏览器需要加上这个属性来规避bug
options.add_argument('--disable-gpu')

# 浏览器以最高权限运行
options.add_argument('--no-sandbox')

# 设置浏览器的代理,请求头等,以列表的形式传入多个参数
options.add_argument("--proxy-server=http://110.52.235.176:9999") 

# 传入Edge浏览器设置,获取Edge浏览器对象
browser = webdriver.Edge(options=options)

# 浏览器对象访问目标网址或目标网页
browser.get("C:\\Users\\86182\\Desktop\\a.html")

Released under the MIT License.