程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

Selenium模拟浏览器Python爬虫指南

hfteth 2025-03-01 14:05:18 技术文章 10 ℃

什么是Selenium

Selenium是一套完整的Web应用程序测试系统,它包含了测试的录制、编写及运行和测试的并行处理。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。完全有JavaScript编写,因此可以运行于任何支持JavaScript的浏览器上。


Selenium作为爬虫工具的优劣势分析

  1. 优势

不需要做复杂的抓包、构造请求、解析数据等,开发难度相对要低一些。其访问参数跟使用浏览器的正常用户一模一样,访问行为也相对更像正常用户,不容易被反爬虫策略命中。在需要模拟用户登录、浏览器滑动或点击时,使用Selenium执行js语句非常容易实现,比较适合动态网页的信息爬取。

2. 劣势

相比于抓包→构造请求→解析返回值的爬虫,由于Selenium需要生成一个浏览器环境,所有操作(与元素交互、获取元素内容等)均需要等待页面加载完毕后才可以继续进行,所以速度相比构造请求的慢很多。如果是爬取静态网页,不建议使用Selenium,原因是速度太慢,效率太低。建议使用其他爬虫工具,比如Scrapy。


Window系统下Selenium的安装与浏览器驱动配置

  1. 安装Selenium

第一步:安装配置Python环境,并安装pip组件。

第二步:在命令行工具中执行如下命令

pip install selenium

第三步:检查是否安装成功,再次执行上面命令,出现如下图所示,表示成功。

2. 配置浏览器驱动

第一步:查看支持的浏览器驱动,依次执行命令:

python
from selenium import webdriver
help(webdriver)

第二步:选择需要使用的浏览器驱动Webdriver,根据电脑的浏览器版本下载对应的驱动到本地。下面是常用驱动下载地址。

Chromedriver(谷歌浏览器)    http://chromedriver.storage.googleapis.com/index.html
Geckodriver(火狐浏览器)    https://github.com/mozilla/geckodriver/releases 
IEdriver(IE浏览器)    http://selenium-release.storage.googleapis.com/index.html
Operadriver(Opera浏览器)   https://cnpmjs.org/mirrors/operadriver

第三步:将下载的驱动,拷贝到python安装目录。

至此,关于Selenium的安装和驱动配置就全部搞定,下面关于Selenium的使用。


Selenium的基础框架

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

if __name__ == '__main__':
    options = Options()
    options.add_argument('--headless')    # 不打开浏览器
    options.add_argument('--disable-gpu')    # 禁用GPU硬件加速
    options.add_argument('user-agent="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1"')  # 添加访问头
    # options.add_argument('proxy-server="60.13.42.109:9999"')    # 添加代理
    driver = webdriver.Chrome(options=options)   # 使用驱动配置
    driver.get("https://baike.baidu.com/item/%E4%BD%A0%E5%A5%BD/32416?fr=aladdin")
    driver.implicitly_wait(10)     # 等待时间
    element = driver.find_element_by_xpath("//div[@class='para']")    # 执行页面定位语句
    isDisplayed = element.is_displayed()   # 判断是否允许访问
    print(isDisplayed)
    print(element.text)

    # 将滚动条移动到页面的顶部 0:为顶部;1000000:为底部
    js = "var q=document.documentElement.scrollTop=10000000000"    # js语句
    driver.execute_script(js)    # 执行语句

    driver.close()
最近发表
标签列表