selenium的基本使用

selenium环境搭建

  1. 下载selenium:pip install selenium
  2. 下载浏览器驱动:浏览器驱动下载视频教程
  3. 浏览器驱动下载地址: 浏览器驱动下载地址

selenium的基本使用

用selenium打开一个百度网页

python 复制代码
from selenium.webdriver import Chrome

# 生成浏览器对象
web = Chrome()
# 需要在浏览器打开的网值
web.get('http://www.baidu.com')
print(web.title)  # 网页的标题

selenium的基本操作

获取一个元素并点击它

python 复制代码
# 用的是Chrome,所以导入的是Chrome,如果用其他的,比如IE、火狐可以导入对应的
from selenium.webdriver import Chrome
# 创建浏览器对象
web = Chrome()
# 打开拉勾网
web.get('https://www.lagou.com/')
# 通过xpath找到包含全国字样的元素,然后点击它
ele = web.find_element(by=By.XPATH, value='//*[@id="changeCityBox"]/p[1]/a')
ele.click()  # 点击元素

往输入框里输入文字并搜索输入内容

python 复制代码
import time
# 用的是Chrome,所以导入的是Chrome,如果用其他的,比如IE、火狐可以导入对应的
from selenium.webdriver import Chrome
# 导入包,可以模拟输入键盘上的按键
from selenium.webdriver.common.keys import Keys
# 导入包,可以引用里面的各种方式查找元素
from selenium.webdriver.common.by import By

# 创建浏览器对象
web = Chrome()
# 打开拉勾网
web.get('https://www.lagou.com/')
# 通过xpath找到包含全国字样的元素,然后点击它
ele = web.find_element(by=By.XPATH, value='//*[@id="changeCityBox"]/p[1]/a')
ele.click()  # 点击元素

# 有可能搜索框这里会奥错,原因是如果点击全国按钮之后网页刷新,那么输入框可能没有加载出来,就获取不到元素
# 所以如果报错可以先延迟一两秒,等页面加载完成在输入内容搜索
time.sleep(1)

# 通过xpath找到包含搜索框的元素:find_element(by=By.XPATH, value='//*[@id="search_input"]')
# 向搜索框输入Python然后按下键盘上的回车键:send_keys('python', Keys.ENTER)
web.find_element(by=By.XPATH, value='//*[@id="search_input"]').send_keys('python', Keys.ENTER)

提取页面中的数据

python 复制代码
import time
# 用的是Chrome,所以导入的是Chrome,如果用其他的,比如IE、火狐可以导入对应的
from selenium.webdriver import Chrome
# 导入包,可以模拟输入键盘上的按键
from selenium.webdriver.common.keys import Keys
# 导入包,可以引用里面的各种方式查找元素
from selenium.webdriver.common.by import By

# 创建浏览器对象
web = Chrome()
# 打开拉勾网
web.get('https://www.lagou.com/')
# 通过xpath找到包含全国字样的元素,然后点击它
ele = web.find_element(by=By.XPATH, value='//*[@id="changeCityBox"]/p[1]/a')
ele.click()  # 点击元素

# 有可能搜索框这里会奥错,原因是如果点击全国按钮之后网页刷新,那么输入框可能没有加载出来,就获取不到元素
# 所以如果报错可以先延迟一两秒,等页面加载完成在输入内容搜索
time.sleep(2)

# 通过xpath找到包含搜索框的元素:find_element(by=By.XPATH, value='//*[@id="search_input"]')
# 向搜索框输入Python然后按下键盘上的回车键:send_keys('python', Keys.ENTER)
web.find_element(by=By.XPATH, value='//*[@id="search_input"]').send_keys('python', Keys.ENTER)

time.sleep(3)
# 提取数据
# 1、先根据xpath得到每个板块所在的div元素,这里要提取所有板块,所以用find_elements方法
# 注意,复制的xpath路径为://*[@id="jobList"]/div[1]/div[1]
# 路径最后的[1]是因为我们复制的时候是复制了某一个板块,而这里我们要得到所有的板块,所以要把[1]去掉
divs = web.find_elements(by=By.XPATH, value='//*[@id="jobList"]/div[1]/div')
# 提取每一个板块中的数据,这里提取工作名称、工资、公司名字
for div in divs:
    job_name = div.find_element(by=By.ID, value='openWinPostion').text
    salary = div.find_element(by=By.CLASS_NAME, value='money__3Lkgq').text
    company = (div.find_element(by=By.CLASS_NAME, value='company-name__2-SjF').
               find_element(by=By.TAG_NAME, value='a').text)
    print(job_name, salary, company)

输出结果:

切换不同的窗口进行操作

python 复制代码
import time
# 用的是Chrome,所以导入的是Chrome,如果用其他的,比如IE、火狐可以导入对应的
from selenium.webdriver import Chrome
# 导入包,可以模拟输入键盘上的按键
from selenium.webdriver.common.keys import Keys
# 导入包,可以引用里面的各种方式查找元素
from selenium.webdriver.common.by import By

# 创建浏览器对象
web = Chrome()
# 打开拉勾网
web.get('https://www.lagou.com/')
# 通过xpath找到包含全国字样的元素,然后点击它
ele = web.find_element(by=By.XPATH, value='//*[@id="changeCityBox"]/p[1]/a')
ele.click()  # 点击元素

# 有可能搜索框这里会奥错,原因是如果点击全国按钮之后网页刷新,那么输入框可能没有加载出来,就获取不到元素
# 所以如果报错可以先延迟一两秒,等页面加载完成在输入内容搜索
time.sleep(2)

# 通过xpath找到包含搜索框的元素:find_element(by=By.XPATH, value='//*[@id="search_input"]')
# 向搜索框输入Python然后按下键盘上的回车键:send_keys('python', Keys.ENTER)
web.find_element(by=By.XPATH, value='//*[@id="search_input"]').send_keys('python', Keys.ENTER)

time.sleep(3)
# 提取数据
# 1、先根据xpath得到每个板块所在的div元素,这里要提取所有板块,所以用find_elements方法
# 注意,复制的xpath路径为://*[@id="jobList"]/div[1]/div[1]
# 路径最后的[1]是因为我们复制的时候是复制了某一个板块,而这里我们要得到所有的板块,所以要把[1]去掉
divs = web.find_elements(by=By.XPATH, value='//*[@id="jobList"]/div[1]/div')
# 提取每一个板块中的数据,这里提取工作名称、工资、公司名字
for div in divs:
    job_name = div.find_element(by=By.ID, value='openWinPostion').text
    salary = div.find_element(by=By.CLASS_NAME, value='money__3Lkgq').text
    company = (div.find_element(by=By.CLASS_NAME, value='company-name__2-SjF').
               find_element(by=By.TAG_NAME, value='a').text)
    print(job_name, salary, company)

time.sleep(2)

# 切换窗口操作
# 点击岗位名称查看详情
web.find_element(By.XPATH, '//*[@id="openWinPostion"]').click()
# 切换到新打开的窗口,即第2个窗口
web.switch_to.window(web.window_handles[1])
detail = web.find_element(By.XPATH, '//*[@id="job_detail"]/dd[2]').text
print(detail)

# 如果想回到岗位展示页面(即原先的页面),那么先关闭当前页面,在切回去
web.close()  # 关闭当前岗位详情页面
# 尝试了一下,不关闭岗位详情页面也可以直接切换到第一个页面
web.switch_to.window(web.window_handles[0])  # 切换回第一个窗口
all = web.find_element(By.XPATH, '//*[@id="jobsContainer"]/div[2]/div[1]/div[1]/div[1]/div[1]/div/div[2]/div[1]')
print(all.text)

运行结果:

切换到iframe页面

python 复制代码
# 用的是Chrome,所以导入的是Chrome,如果用其他的,比如IE、火狐可以导入对应的
from selenium.webdriver import Chrome
# 导入包,可以引用里面的各种方式查找元素
from selenium.webdriver.common.by import By

# 创建浏览器对象
web = Chrome()
# 访问网页A
web.get('网页A的网址')
# 假设网页A嵌套着一个iframe页面
# 如果要访问iframe页面,首先要拿到iframe这个页面元素
iframe = web.find_element(By.XPATH, 'iframe元素的xpath')
# 然后切换到iframe页面
web.switch_to.frame(iframe)
# 对iframe页面的操作同之前的做法,操作完iframe页面后,想切回去
web.switch_to.default_content()  # 切换回网页A的页面

下拉框的操作

复制代码
import time
from selenium.webdriver import Chrome
# 导入下拉框相关的包
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.by import By
# 导入浏览器相关的配置包
from selenium.webdriver.chrome.options import Options


# 配置无头浏览器
# 无头浏览器就是用selenium时不弹出浏览器页面
opt = Options()
opt.add_argument('--headless')
opt.add_argument('--disbale-gpu')

web = Chrome(options=opt)
url = '包含下拉框的网页地址'
web.get(url)  # 发起请求
# 获取下拉框元素
sel_ele = web.find_element(by=By.XPATH, value='xxx')
# 将获取到的下拉框元素包装成下拉框菜单
sel = Select(sel_ele)
# 点击下拉框中的每一个选项得到对应的数据
for i in range(len(sel.options)):  # sel.options获取下拉框中的所有选项
    """
    # 下拉框元素
    <select>
        <option value='xxx'>text</option>
    </select>
    """
    # 下列三种方式表示选择某一个选项,然后会发送对应的网络请求获取数据
    # sel.select_by_value('xxx')  # 通过选项的值获取
    # sel.select_by_visible_text('text')  # 通过选项的可视文本获取
    sel.select_by_index(i)  # 通过选项的索引获取
    time.sleep(2)  # 休眠2秒,等待网络请求返回数据


# 拿到页面代码,就是 右键->检查 那里的HTML代码
# 和页面源代码的区别就是页面源代码不包含js动态加载后的代码(页面源代码就是右键->查看页面源代码)
print(web.page_source)
相关推荐
__lost6 分钟前
Python图像变清晰与锐化,调整对比度,高斯滤波除躁,卷积锐化,中值滤波钝化,神经网络变清晰
python·opencv·计算机视觉
海绵波波10712 分钟前
玉米产量遥感估产系统的开发实践(持续迭代与更新)
python·flask
爱吃泡芙的小白白44 分钟前
爬虫学习——使用HTTP服务代理、redis使用、通过Scrapy实现分布式爬取
redis·分布式·爬虫·http代理·学习记录
逢生博客1 小时前
使用 Python 项目管理工具 uv 快速创建 MCP 服务(Cherry Studio、Trae 添加 MCP 服务)
python·sqlite·uv·deepseek·trae·cherry studio·mcp服务
堕落似梦1 小时前
Pydantic增强SQLALchemy序列化(FastAPI直接输出SQLALchemy查询集)
python
坐吃山猪2 小时前
Python-Agent调用多个Server-FastAPI版本
开发语言·python·fastapi
Bruce-li__2 小时前
使用Django REST Framework快速开发API接口
python·django·sqlite
小兜全糖(xdqt)2 小时前
python 脚本引用django中的数据库model
python·django
Arenaschi3 小时前
SQLite 是什么?
开发语言·网络·python·网络协议·tcp/ip
纪元A梦3 小时前
华为OD机试真题——推荐多样性(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
java·javascript·c++·python·华为od·go·华为od机试题