【Python进阶】Python爬虫-Selenium

🌈 个人主页:(时光煮雨)

🔥 高质量专栏:vulnhub靶机渗透测试

👈 希望得到您的订阅和支持~

💡 创作高质量博文(平均质量分95+),分享更多关于网络安全、Python领域的优质内容!(希望得到您的关注~)


🌵目录🌵


前言

Selenium 是一个用于自动化 Web 浏览器操作的强大工具,广泛应用于 Web 应用程序测试、网页数据抓取和任务自动化等场景。

Selenium 为各种编程语言提供了 API,用作测试。 目前的官方 API 文档有 C#、JavaScript、Java、Python、Ruby。

Selenium 教程:https://www.runoob.com/selenium/


🍦一、安装 Selenium 和 WebDriver

🍧1.1.安装 Selenium

要开始使用 Selenium,首先需要安装 selenium 库,并下载适用于你浏览器的 WebDriver。

使用 pip 安装 Selenium:

bash 复制代码
pip install selenium

安装完成后,可以使用以下命令查看 selenium 的版本信息:

bash 复制代码
pip show selenium
bash 复制代码
Name: selenium
Version: 4.36.0
Summary: Official Python bindings for Selenium WebDriver
Home-page: https://www.selenium.dev
Author:
Author-email:
License: Apache-2.0
Location: D:\IDE\python\Lib\site-packages
Requires: certifi, trio, trio-websocket, typing_extensions, urllib3, websocket-client
Required-by:

🍨1.2.下载WebDriver

Selenium 需要一个 WebDriver 来与浏览器进行交互。

不同的浏览器需要不同的 WebDriver,例如 Chrome 浏览器需要 ChromeDriver,你需要根据你使用的浏览器下载相应的 WebDriver,并确保它在你的系统 PATH 中。

选择浏览器并初始化 WebDriver:

python 复制代码
from selenium import webdriver

# 使用 Chrome 浏览器
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')

# 或者使用 Firefox 浏览器
# driver = webdriver.Firefox(executable_path='/path/to/geckodriver')

# 或者使用 Edge 浏览器
# driver = webdriver.Edge(executable_path='/path/to/msedgedriver')

从 Selenium 4 开始,在浏览器驱动的管理方式上发生了变化:Selenium 4 尝试自动检测系统中安装的浏览器版本,并下载相应的驱动程序,这意味着用户不再需要手动下载和设置驱动程序路径,除非他们需要特定版本的驱动程序

python 复制代码
from selenium import webdriver

driver = webdriver.Chrome()  # 如果使用其他浏览器,如 Firefox,需要相应修改

当国内的网络环境,自动检测下载驱动需要不一样的网络环境,所以建议手动下载驱动,然后指定驱动路径

在 Selenium 4 中,不再直接在 webdriver.Chrome 中设置驱动程序路径,而是通过引入 Service 对象来设置。这样可以避免弃用警告,并确保驱动程序的正确加载。例如:

python 复制代码
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService

service = ChromeService(executable_path="PATH_TO_DRIVER")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)

以下代码指定驱动文件路径来获取网页标题:

python 复制代码
from selenium import webdriver

# 设置正确的驱动路径
driver = webdriver.Edge()

# 打开一个网站
url = "https://www.sogou.com/"
driver.get(url=url)

# 获取页面标题
print(driver.title)

# 关闭浏览器
driver.quit()

🍩二、基本用法

🍪2.1.初始化 WebDriver

选择浏览器并初始化 WebDriver:

python 复制代码
from selenium import webdriver

# 使用 Chrome 浏览器
driver = webdriver.Chrome()

# 或者使用 Firefox 浏览器
# driver = webdriver.Firefox()

# 或者使用 Edge 浏览器
# driver = webdriver.Edge()

🍨2.2.打开网页

使用 get() 方法打开网页:

python 复制代码
driver.get("https://www.sogou.com/")

🎂2.3.查找页面元素

可以通过多种方式查找页面元素,例如使用 ID、类名、标签名等:

python 复制代码
# 通过 ID 查找元素
search_box = driver.find_element("id", "kw")

# 通过类名查找元素
search_button = driver.find_element("class name", "s_ipt")

# 通过标签名查找元素
links = driver.find_elements("tag name", "a")

实例:

python 复制代码
from selenium import webdriver

# 设置正确的驱动路径
driver = webdriver.Edge()

# 打开一个网站
url = "https://www.sogou.com/"
driver.get(url=url)

# 获取页面标题
print(f"页面标题:{driver.title}")

# 通过 ID 查找元素
search_box = driver.find_element("id", "stb")
print(f"stb元素的属性:{search_box.get_attribute('value')}")

# 通过类名查找元素
search_button = driver.find_element("class name", "sec-input")
print(f"sec-input框的placeholder:{search_button.get_attribute('placeholder')}")

# 通过标签名查找元素
links = driver.find_elements("tag name", "a")
print(f"a标签的href属性:{links[0].get_attribute('href')}")

# 关闭浏览器
driver.quit()

输出结果:

bash 复制代码
页面标题:搜狗搜索引擎 - 上网从搜狗开始
stb元素的属性:搜索
sec-input框的placeholder:以色列宣布:驱逐出境
a标签的href属性:http://weixin.sogou.com/

🍰2.4.模拟用户操作

Selenium 可以模拟用户在浏览器中的操作,例如点击、输入文本等:

python 复制代码
# from selenium import webdriver
#
# # 设置正确的驱动路径
# driver = webdriver.Edge()
#
# # 打开一个网站
# url = "https://www.sogou.com/"
# driver.get(url=url)
#
# # 获取页面标题
# print(f"页面标题:{driver.title}")
#
# # 通过 ID 查找元素
# search_box = driver.find_element("id", "stb")
# print(f"stb元素的属性:{search_box.get_attribute('value')}")
#
# # 通过类名查找元素
# search_button = driver.find_element("class name", "sec-input")
# print(f"sec-input框的placeholder:{search_button.get_attribute('placeholder')}")
#
# # 通过标签名查找元素
# links = driver.find_elements("tag name", "a")
# print(f"a标签的href属性:{links[0].get_attribute('href')}")
#
# # 关闭浏览器
# driver.quit()

from selenium import webdriver

# 设置正确的驱动路径
driver = webdriver.Edge()

# 打开一个网站
url = "https://www.sogou.com/"
driver.get(url=url)



# 通过类名查找元素
search_button = driver.find_element("class name", "sec-input")
search_button.send_keys("selenium python")

# 通过 ID 查找元素
search_box = driver.find_element("id", "stb")
search_box.send_keys("selenium python")

# 通过标签名查找元素
links = driver.find_elements("class name", "vr-title")
for link in links:
    print(link.text)

# 关闭浏览器
driver.quit()

🧁2.5.获取元素属性和文本

可以获取页面元素的属性值或文本内容:

python 复制代码
# 获取元素的文本
element_text = search_box.text

# 获取元素的属性值
element_attribute = search_box.get_attribute("placeholder")

🥧2.6.等待

有时页面加载需要时间,可以使用显式等待或隐式等待来确保元素可操作:

python 复制代码
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 显式等待
element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "kw"))
)

# 隐式等待
driver.implicitly_wait(10)

🍭2.7.关闭浏览器

操作完成后,记得关闭浏览器:

python 复制代码
driver.quit()

🍯三、selenium 常用方法

下表列出了 selenium 库的常用方法:

方法 说明 示例代码
webdriver.Chrome() 初始化 Chrome 浏览器实例。 driver = webdriver.Chrome()
driver.get(url) 访问指定的 URL 地址。 driver.get("https://example.com")
driver.find_element(By, value) 查找第一个匹配的元素。 element = driver.find_element(By.ID, "id")
driver.find_elements(By, value) 查找所有匹配的元素。 elements = driver.find_elements(By.CLASS_NAME, "class")
element.click() 点击元素。 element.click()
element.send_keys(value) 向输入框中发送键盘输入。 element.send_keys("text")
element.text 获取元素的文本内容。 text = element.text
driver.back() 浏览器后退。 driver.back()
driver.forward() 浏览器前进。 driver.forward()
driver.refresh() 刷新当前页面。 driver.refresh()
driver.execute_script(script, *args) 执行 JavaScript 脚本。 driver.execute_script("alert('Hello!')")
driver.switch_to.frame(frame_reference) 切换到指定的 iframe。 driver.switch_to.frame("frame_id")
driver.switch_to.default_content() 切换回主文档。 driver.switch_to.default_content()
driver.quit() 关闭浏览器并退出驱动。 driver.quit()
driver.close() 关闭当前窗口。 driver.close()

总结

Python Selenium库的完整入门指南,首先介绍了Selenium作为一个用于自动化Web浏览器操作(如测试和数据抓取)的强大工具,并详细说明了其安装配置步骤:需通过pip install selenium安装库,并重点强调了Selenium 4版本虽可自动管理浏览器驱动,但在国内网络环境下仍建议手动下载并通过新的Service对象(如ChromeService(executable_path="路径"))指定驱动路径以避免警告。教程的核心内容涵盖了基本用法:包括初始化浏览器、使用get(url)打开网页、利用多种方式(如ID、类名)查找元素、模拟点击和输入操作、获取元素文本属性、以及使用显式或隐式等待确保页面加载,最后操作完毕需用quit()关闭浏览器。此外,教程还通过一个完整的百度搜索自动化示例演示了这些操作的结合使用,并列表总结了如页面导航、执行JavaScript等常用方法,为初学者提供了一个全面且实用的上手参考。


🤝 期待与你共同进步

🌱 亲爱的读者,非常感谢你每一次的停留和阅读!你的支持是我们前行的最大动力!🙏

🌐 在这茫茫网海中,有你的关注,我们深感荣幸。你的每一次点赞👍、收藏🌟、评论💬和关注💖,都像是明灯一样照亮我们前行的道路,给予我们无比的鼓舞和力量。🌟

📚 我们会继续努力,为你呈现更多精彩和有深度的内容。同时,我们非常欢迎你在评论区留下你的宝贵意见和建议,让我们共同进步,共同成长!💬

💪 无论你在编程的道路上遇到什么困难,都希望你能坚持下去,因为每一次的挫折都是通往成功的必经之路。我们期待与你一起书写编程的精彩篇章! 🎉

🌈 最后,再次感谢你的厚爱与支持!愿你在编程的道路上越走越远,收获满满的成就和喜悦!祝你编程愉快!🎉


📚 参考文档

相关推荐
小政同学8 小时前
【Python】小练习-考察变量作用域问题
开发语言·python
Lynnxiaowen8 小时前
今天我们开始学习python3编程之python基础
linux·运维·python·学习
青青草原羊村懒大王8 小时前
1、pycharm相关知识
python
嫂子的姐夫8 小时前
10-七麦js扣代码
前端·javascript·爬虫·python·node.js·网络爬虫
77qqqiqi8 小时前
python循环语句
python
我是华为OD~HR~栗栗呀8 小时前
24届-Python面经(华为OD)
java·前端·c++·python·华为od·华为·面试
2401_841495648 小时前
【数值分析】插值法实验
python·数学·算法·可视化·数值分析·数学原理·插值法
winfredzhang9 小时前
Python小说图片PDF生成器开发详解
python·pdf·图文并茂·电子小说
Derrick__19 小时前
Python网络编程——TCP编程
python·网络协议·tcp/ip