Python 爬虫类库 Selenium 的常用方法介绍
Selenium 简介
Selenium 是一个 Web 的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是 Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器(包括 PhantomJS 这些无界面的浏览器)。
Selenium 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。
Selenium 自己不带浏览器,不支持浏览器的功能,它需要与第三方浏览器结合在一起才能使用。
先下载 selenium webdriver geckodriver.exe
,下载好后放到 python 目录里面。
Firefox 的目录也要添加到环境变量中。
Selenium 库里有个叫 WebDriver 的 API。WebDriver 有点儿像可以加载网站的浏览器,但是它也可以像 BeautifulSoup 或者其他 Selector 对象一样用来查找页面元素,与页面上的元素进行交互(发送文本、点击等),以及执行其他动作来运行网络爬虫。
Selenium 快速入门
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | # -*- coding:utf-8 -*- from selenium import webdriver # 要想调用键盘按键操作需要引入 keys 包 from selenium.webdriver.common.keys import Keys # 创建浏览器对象 driver = webdriver.Firefox() driver.get( "http://www.baidu.com" ) # 打印页面标题“百度一下你就知道” print (driver.title) # 生成当前页面快照 driver.save_screenshot( "baidu.png" ) # 是百度搜索框,输入字符串“微博”,跳转到搜索页面 driver.find_element_by_id( "kw" ).send_keys(u "微博" ) # 是百度搜索按钮,click() 是模拟点击 driver.find_element_by_id( "su" ).click() # 获取新的页面快照 driver.save_screenshot(u "screenshot.png" ) # 打印网页渲染后的源代码 print (driver.page_source) # 获取当前页面 Cookie print (driver.get_cookies()) # ctrl+a 全选输入框内容 driver.find_element_by_id( "kw" ).send_keys(Keys.CONTROL, 'a' ) # ctrl+x 剪切输入框内容 driver.find_element_by_id( "kw" ).send_keys(Keys.CONTROL, 'x' ) # 输入框重新输入内容 driver.find_element_by_id( "kw" ).send_keys( "test" ) # 模拟 Enter 回车键 driver.find_element_by_id( "su" ).send_keys(Keys.RETURN) # 清除输入框内容 driver.find_element_by_id( "kw" ).clear() # 生成新的页面快照 driver.save_screenshot( "test.png" ) # 获取当前 url print (driver.current_url) # 关闭当前页面,如果只有一个页面,会关闭浏览器 driver.close() # 关闭浏览器 driver.quit() |
1、页面操作
假如有下面的输入框:
1 | < input type="text" name="user-name" id="passwd-id" /> |
查找方法如下:
1 2 3 4 5 6 7 8 | # 获取 id 标签值 element = driver.find_element_by_id( "passwd-id" ) # 获取 name 标签值 element = driver.find_element_by_name( "user-name" ) # 获取标签名值 element = driver.find_elements_by_tag_name( "input" ) # 也可以通过 XPath 来匹配 element = driver.find_element_by_xpath( "//input[@]" ) |
2、定位元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # 通过 Id 定位目标元素 driver.find_element_by_id( 'i1' ) # 通过 className 定位目标元素,返回一个对象 driver.find_element_by_class_name( 'c1' ) # 通过 name 属性定位目标元素,返回一个对象 driver.find_element_by_name( 'n1' ) # 通过 Xpath 定位目标元素,返回一个对象 driver.find_element_by_xpath( '//*[@id="i1"]' ) # 通过 css Selector 定位目标元素,返回一个对象 driver.find_element_by_css_selector( '#i1' ) # 通过标签名称定位,返回一个对象 driver.find_element_by_tag_name( 'input' ) # 通过标签中的文本查找元素,返回一个对象 driver.find_element_by_link_text( '登录' ) |
一次查找多个元素(这些方法会返回一个 list 列表):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # 通过 className 定位目标元素,返回一个集合 driver.find_elements_by_class_name( 'c1' ) # 通过 name 属性定位目标元素,返回一个集合 driver.find_elements_by_name( 'n1' ) # 通过 Xpath 定位目标元素,返回一个集合 driver.find_elements_by_xpath( '//*[@id="i1"]' ) # 通过 Css Selector 定位目标元素,返回一个集合 driver.find_elements_by_css_selector( '#i1' ) # 通过标签名称定位,返回一个集合 driver.find_elements_by_tag_name( 'input' ) # 通过标签中的文本查找元素,返回一个集合 driver.find_element_by_link_text( '登录' ) # 通过标签中文本的模糊匹配查找,返回一个集合 find_elements_by_partial_link_text( "订单" ) |
3、鼠标动作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # -*- coding:utf-8 -*- from selenium import webdriver # 要想调用键盘按键操作需要引入 keys 包 from selenium.webdriver.common.keys import Keys from selenium.webdriver import ActionChains # 创建浏览器对象 driver = webdriver.Firefox() # 打开页面 driver.get( "http://www.baidu.com" ) # 鼠标移动到某处 action1 = driver.find_element_by_id( "su" ) ActionChains(driver).move_to_element(action1).perform() # 鼠标移动到某处单击 action2 = driver.find_element_by_id( "su" ) ActionChains(driver).move_to_element(action2).click(action2).perform() # 鼠标移动到某处双击 action3 = driver.find_element_by_id( "su" ) ActionChains(driver).move_to_element(action3).double_click(action3).perform() # 鼠标移动到某处右击 action4 = driver.find_element_by_id( "su" ) ActionChains(driver).move_to_element(action4).context_click(action4).perform() |
4、Select 表单
1 2 3 4 5 6 7 8 9 | # 导入 Select 类 from selenium.webdriver.support.ui import Select # 找到 name 的选项卡 select = Select(driver.find_element_by_name( 'status' )) select.select_by_index( 1 ) select.select_by_value( "0" ) select.select_by_visible_text(u "xxx" ) |
以上是三种选择下拉框的方式,它可以根据索引来选择,可以根据值来选择,可以根据文字来选择。注意:
index 索引从 0 开始
value 是 option 标签的一个属性值,并不是显示在下拉框中的值
visible_text 是在 option 标签文本的值,是显示在下拉框的值
全部取消方法
1 | select.deselect_all() |
5、弹窗处理
当页面出现了弹窗提示:
1 | alert = driver.switch_to_alert() |
6、页面切换
一个浏览器肯定会有很多窗口,所以我们肯定要有方法来实现窗口的切换。切换窗口的方法如下:
1 | driver.switch_to.window( "this is window name" ) |
7、页面前进和后退
1 2 | driver.forward() #前进 driver.back() # 后退 |
8、模拟登陆豆瓣网站
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # -*- coding:utf-8 -*- from selenium import webdriver from selenium.webdriver.common.keys import Keys import time driver = webdriver.Firefox() driver.get( "http://www.douban.com" ) # 输入账号密码 driver.find_element_by_name( "form_email" ).send_keys( "158xxxxxxxx" ) driver.find_element_by_name( "form_password" ).send_keys( "zhxxxxxxxx" ) # 模拟点击登录 driver.find_element_by_xpath( "//input[@]" ).click() # 等待3秒 time.sleep( 3 ) # 生成登陆后快照 driver.save_screenshot(u "douban.png" ) driver.quit() |
以上就是 Selenium 的一些常用方法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南