什么是Selenium

简介: 什么是Selenium

image.png


# 01、模拟浏览器:Selenium

我们知道,网页会使用JavaScript加载数据,对应于这种模式,可以通过分析数据接口来进行直接抓取,这种方式需要对网页的内容、格式和JavaScript代码有所研究才能顺利完成。但有时还会碰到另外一些页面,这些页面同样使用AJAX技术,但是其页面结构比较复杂,很多网页中的关键数据由AJAX获得,而页面元素本身也使用JavaScript来添加或修改,甚至于人们感兴趣的内容在原始页面中并不出现,需要进行一定的用户交互(如不断下拉滚动条)才会显示。对于这种情况,为了方便,就会考虑使用模拟浏览器的方法来进行抓取,而不是通过“逆向工程”去分析AJAX接口,使用模拟浏览器的方法,特点是普适性强,开发耗时短,抓取耗时长(模拟浏览器的性能问题始终令人忧虑),使用分析AJAX的方法,特点则刚好与模拟浏览器相反,甚至在同一个网站、同一个类别中的不同网页上,AJAX数据的具体访问信息都有差别,因此开发过程投入的时间和精力成本是比较大的。如果碰到页面结构相对复杂或者AJAX数据分析比较困难(如数据经过加密)的情况,就需要考虑使用浏览器模拟的方式了。

在Python模拟浏览器进行数据抓取方面,Selenium永远是绕不过去的一个坎。Selenium(意为化学元素“硒”)是浏览器自动化工具,在设计之初是为了进行浏览器的功能测试。Selenium的作用,直观地说,就是使得操纵浏览器进行一些类似普通用户的操作成为可能,如访问某个地址、判断网页状态、单击网页中的某个元素(按钮)等。使用Selenium来操控浏览器进行的数据抓取其实已经不能算是一种“爬虫”程序,一般谈到爬虫,自然想到的是独立于浏览器之外的程序,但无论如何,这种方法有助于解决一些比较复杂的网页抓取任务,由于直接使用了浏览器,麻烦的AJAX数据和JavaScript动态页面一般都已经渲染完成,利用一些函数,完全可以做到随心所欲地抓取,加之开发流程也比较简单,因此有必要进行基本的介绍。

Selenium本身只是个工具,而不是一个具体的浏览器,但是Selenium支持包括Chrome和Firefox在内的主流浏览器。为了在Python中使用Selenium,需要安装selenium库(仍然通过pip install selenium的方式进行安装)。完成安装后,为了使用特定的浏览器,可能需要下载对应的驱动。将下载到的文件放在某个路径下。并在程序中指明该路径即可。如果想避免每次配置路径的麻烦,可以将该路径设置为环境变量,这里就不再赘述了。

通过一个访问百度新闻站点的例子来引入selenium库,代码如下:
js from selenium import webdriver import time browser = webdriver.Chrome('yourchromedriverpath')井如"/home/zyang/chromedriver browser.get('http:www.baidu.com') print(browser.title) #输出:“百度一下,你就知道” browser.find element by name("tj trnews").click()#单击头条browser.find element by class name('hdline0').click()print(browser.current url) #单击“新闻” 井输出: http://news.baidu.com/ time.sleep(10) browser.quit() #退出
运行上面的代码,会看到Chrome程序被打开,浏览器访问了百度首页,然后跳转到了百度新闻页面,之后又选择了该页面的第一个头条新闻,从而打开了新的新闻页。一段时间后,浏览器关闭并退出。控制台会输出“百度一下,你就知道”(对应browser.title)和 http://news.baidu.com/(对应browser.current_url)。这无疑是一个好消息,如果能获取对浏览器的控制权,那么爬取某一部分的内容会变得如臂使指。

另外,selenium库能够提供实时网页源码,这使得通过结合Selenium和BeautifulSoup(以及其他上文所述的网页元素解析方法)成为可能,如果对selenium库自带的元素定位API不甚满意,那么这会是一个非常好的选择。总的来说,使用selenium库的主要步骤如下。

① 创建浏览器对象,即使用类似下面的语句:
js from selenium import webdriver webdriver.Chrome()browser =
② 访问页面,主要使用browser.get方法,传入目标网页地址。

③ 定位网页元素,可以使用selenium自带的元素查找API,即
js = browser.find_element by_id("id")element element = browser.find element by name("name") element = browser.find element by xpath("xpath")element = browser.find element by link text('link text') #...
还可以使用browser.page_source获取当前网页源码并使用BeautifulSoup等网页解析工具定位:
js from selenium import webdriver from bs4 import BeautifulSoup browser = webdriver.Chrome('yourchromedriverpath')url = 'https://www.douban.com'browser.get(url) ht = BeautifulSoup(browser.page source,'lxml')for one in ht.find all('a',class ='title'):print(one.text) #输出: #52 倍人生--戴锦华大师电影课 ..... #觉知即新生一-终止童年创伤的心理修复课

④ 网页交互,对元素进行输入、选择等操作。如访问豆瓣并搜索某一关键字(效果见图1)的代码如下。
js from selenium import webdriver import time from selenium.webdriver.common.by import By browser = webdriver.Chrome('yourchromedriverpath')browser.get('http://www.douban.com')time.sleep(1) search box = browser.find_element(By.NAME,q')search box.send keys( 网站开发)button = browser.find element(By.CLASS NAME,bn')button.click()

image.png


■ 图1 使用Selenium操作Chrome进行豆瓣搜索的结果

在导航(窗口中的前进与后退)方面,主要使用browser.back和browser.forward两个函数。

⑤ 获取元素属性。可供使用的函数方法很多,例如:

#one应该是一个 selenium.webdriver.remote.webelement.WebElement 类的对象
one.text
one.get attribute('href')
one.tag name
one.id
...

之前曾对Selenium的基本使用做过简单的说明,有了网站交互(而不是典型爬虫程序避开浏览器界面的策略)还能够完成很多测试工作,如找出异常表单、HTML排版错误、页面交互问题。

目录
相关文章
|
8月前
|
人工智能 JavaScript Linux
立即吃上AI龙虾!OpenClaw 1分钟阿里云上/本地部署+MiniMax/Claude/百炼免费模型配置解析
本文详细介绍了2026年OpenClaw在阿里云轻量服务器与本地多系统的部署流程,以及MiniMax、Claude、阿里云百炼三大免费模型的配置方法,针对新手常见问题提供了避坑指南与解决方案。通过阿里云部署可实现7×24小时稳定运行,本地部署则兼顾隐私与灵活性,用户可根据自身需求选择合适方案。后续可进一步探索OpenClaw的技能市场、任务调度等高级功能,打造专属AI助理,提升工作效率。
1500 0
|
6月前
|
人工智能 自然语言处理 算法
大模型应用:搜索的智能革命:大模型如何重塑传统搜索算法构建新一代智能检索.110
本文详解大模型如何赋能传统搜索:突破关键词匹配瓶颈,通过语义理解、Embedding向量化、意图推理与结果生成,实现“召回更全、排序更准、体验更优”的智能搜索升级,并附完整代码示例。
423 6
|
IDE 数据可视化 程序员
一文讲透:低代码平台是什么?低代码平台应该如何挑选?
低代码(Low Code)是一种通过可视化和配置化方式快速开发应用的技术工具平台,旨在减少手动编码量,提升开发效率。2014年Forrester定义其为“快速交付应用并简化部署”的工具,随后Gartner推广aPaaS/iPaaS概念,进一步推动其发展。低代码平台适用于数据管理、业务逻辑处理、权限控制、审批流程、报表分析等场景,支持手机访问、版本管理和日志记录等功能。挑选低代码平台需关注数据、逻辑、权限等11个关键问题。对程序员而言,低代码不仅降低开发门槛,还助力个人向产品/项目经理转型,创造更高价值。
2253 32
|
10月前
|
存储 固态存储 Java
固态硬盘数据恢复成功率高吗
SSD数据能否找回?答案取决于TRIM、写入覆盖、故障类型等六大因素。误删后立即断电、避免通电损耗,通过只读方式抢救。DIY可处理逻辑错误,物理损坏需专业设备。加密盘无密钥难恢复,最佳策略是预防——及时备份才是根本。
|
10月前
|
设计模式 存储 人工智能
LLM全新智能体架构:核心组件、工作流程与设计模式全解析
随着生成式AI迈向生产力工具,智能体(Agent)架构成为关键。本文系统拆解其四大核心组件:大脑(LLM)、规划、记忆与工具,详解“感知-思考-行动”闭环流程及主流设计模式,助力开发者构建工业级AI应用。(238字)
1279 1
|
11月前
|
SQL Java 数据库连接
持久层框架MyBatisPlus
MyBatisPlus是基于MyBatis的增强ORM框架,简化单表增删改查操作。通过继承BaseMapper即可实现CRUD,支持注解映射与全局配置,提供QueryWrapper、UpdateWrapper等条件构造器,灵活构建查询条件,并可结合自定义SQL满足复杂业务需求,大幅提升开发效率。
|
运维 安全 测试技术
Hydra-SSH 漏洞安全防范
Hydra 是由 THC 组织开发的强力网络安全测试工具,主要用于对 SSH、FTP、HTTP 等协议进行认证爆破,适用于授权渗透测试与弱口令检测。其高效性依赖于优化的字典策略,强调质量优先,结合目标信息定制密码列表,提高破解成功率。
963 1
|
JSON API 数据安全/隐私保护
农业银行模拟器,工商建设邮政中国银行,虚拟余额生成模拟器
这个银行模拟系统包含三个主要模块:核心银行账户逻辑、图形用户界面和REST API接口
|
Web App开发 API 网络安全
Google 翻译插件不能用了怎么办
Google 翻译退出中国
6078 4
Google 翻译插件不能用了怎么办
|
域名解析 负载均衡 应用服务中间件
nginx反向代理https域名时,请求报错502问题排查
nginx反向代理https域名时,请求报错502问题排查

热门文章

最新文章