前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >大模型开发实战:(一)使用 Selenium 进行网页爬虫

大模型开发实战:(一)使用 Selenium 进行网页爬虫

作者头像
张高兴
发布于 2025-05-21 06:10:39
发布于 2025-05-21 06:10:39
67400
代码可运行
举报
文章被收录于专栏:张高兴的博客张高兴的博客
运行总次数:0
代码可运行

什么是 Selenium

Selenium 由 Jason Huggins 于 2004 年发起,最初名为 JavaScript Testing Framework,后因受到希腊神话中“月亮女神 Selene”的启发而更名为 Selenium。它最初是为了解决网页自动化测试需求而诞生的开源工具,但因其能模拟真实浏览器操作(如点击、输入、滚动等),也被广泛用于网页数据爬取。爬虫工具有很多,例如 BeautifulSoup4,为什么选择自动化测试工具 Selenium 进行爬虫?目前绝大部分 Web 应用都使用 JavaScrip 动态加载数据,而 BeautifulSoup4 只能解析初始页面的 HTML 源码,对于动态加载的数据无法获取,因此使用 Selenium 模拟用户,完成数据加载的操作。

场景

Selenium

BeautifulSoup4

动态网页数据爬取

✅ 必须使用,如单页应用、JavaScript 渲染内容。

❌ 无法直接处理,需结合其他工具(如 Selenium 获取动态内容后解析)。

静态网页数据提取

⚠️ 可用,但效率较低。

✅ 推荐,快速解析固定结构的 HTML/XML。

登录验证/表单提交

✅ 直接模拟用户输入和点击。

❌ 需结合 Requests 会话保持,但无法处理 JavaScript 验证。

跨浏览器兼容性测试

✅ 支持多浏览器并行测试(如通过 Selenium Grid)。

❌ 无此功能,仅解析 HTML。

环境搭建与配置

安装 Selenium

创建 Python 虚拟环境后,执行命令安装 selenium 包。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install selenium

下载浏览器驱动

下面以 Edge 浏览器为例:

确认 Edge 版本:

  • 设置 → 关于 Microsoft Edge。

下载对应版本的浏览器驱动:

  • 官网:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver
  • 注意:驱动版本需与浏览器版本一致(如浏览器版本为116,需选择116.x.x的驱动)。

配置驱动路径:

  • 方式一:将 edgedriver.exe 放置在任意已知的目录中或添加到系统环境变量中。from selenium import webdriver from selenium.webdriver.edge.service import Service service = Service(executable_path='D:/msedgedriver.exe') driver = webdriver.Edge(service=service)
  • 方式二:使用 WebDriverManager 自动管理驱动:# 安装 WebDriverManager pip install webdriver-manager # 使用代码自动下载驱动 from selenium import webdriver from selenium.webdriver.edge.service import Service from webdriver_manager.microsoft import EdgeChromiumDriverManager service = Service(executable_path=EdgeChromiumDriverManager().install()) driver = webdriver.Edge(service=service)

基础操作

启动浏览器并访问网页

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from selenium import webdriver
from selenium.webdriver.edge.service import Service

service = Service(executable_path='D:/msedgedriver.exe')
driver = webdriver.Edge(service=service)
driver.get("https://www.baidu.com/")

定位网页元素

不管是爬虫或者是测试,获取到“感兴趣”的元素才能进行后续的操作。常见的定位方法有这样几种方式:

定位方式

语法示例

适用场景

ID

driver.find_element(By.ID, "username")

通过元素的 id 属性定位,唯一性高,但需要目标元素有 id

CSS 选择器

driver.find_element(By.CSS_SELECTOR, ".login")

通过 CSS 选择器定位,灵活,适合复杂结构

XPath

driver.find_element(By.XPATH, "//button[@type='submit']")

通过 XPath 路径定位,精准,但路径易变,维护成本高

通过 ID 定位
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from selenium.webdriver.common.by import By

element = driver.find_element(By.ID, "su")
通过 CSS 选择器定位
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
element = driver.find_element(By.CSS_SELECTOR, ".s_btn")
通过 XPath 定位
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
element = driver.find_element(By.XPATH, "//*[@id="su"]")

与元素交互

提取数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 获取页面标题
title = driver.title
# 获取元素文本、属性
text = element.text
href = element.get_attribute("href")
交互操作
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 输入文本
search_input = driver.find_element(By.ID, "kw")
search_input.clear()  # 清除原有内容
search_input.send_keys("电脑玩家张高兴")
# 点击按钮
search_btn = driver.find_element(By.ID, "su")
search_btn.click()

设置等待时间

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
driver.implicitly_wait(10)  # 等待 10

切换页面

Selenium 不会主动的切换窗口,要对新弹出的页面进行操作,需要先调用 switch_to 切换到该页面。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 获取所有窗口,将页面切换到最新的窗口
windows = driver.window_handles
driver.switch_to.window(windows[-1])

执行 JavaScript 代码

有时网页数据是动态加载的,因此需要执行 JavaScript 代码,完成数据加载这一行为的触发。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 模拟滚动到底部加载更多内容
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

关闭浏览器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
driver.quit()

进阶技巧

使用 ActionChains 模拟用户操作

ActionChains 是 Selenium 提供的一个低级用户交互模拟工具,用于执行复杂的鼠标和键盘操作。它通过构建一系列动作(如鼠标移动、点击、拖拽、键盘按键等)的队列,模拟真实用户的操作流程。

常用方法

方法

功能

move_to_element(element)

鼠标悬停在指定元素上

click(element)

点击元素

click_and_hold(element)

按住鼠标左键

context_click(element)

右键点击元素

double_click(element)

双击元素

drag_and_drop(source, target)

拖拽元素到目标位置

move_by_offset(x, y)

从当前位置移动鼠标到相对坐标(x,y)

key_down(key, element)

按下某个键(如 Keys.CONTROL),并保持按下状态

key_up(key, element)

松开之前按下的键

send_keys(keys)

向当前焦点元素发送按键

模拟鼠标悬停点击菜单项

下面模拟用户用鼠标点击百度顶部菜单“更多”中的“翻译”条目。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from selenium.webdriver.common.action_chains import ActionChains
# 获取相关元素
menu = driver.find_element(By.CSS_SELECTOR, "#s-top-left > div")
item = driver.find_element(By.CSS_SELECTOR, "#s-top-more > div:nth-child(1) > a")
# 定义动作链
actions = ActionChains(driver)
actions.move_to_element(menu).pause(1).click(item).perform()  # pause(1) 悬停1秒后点击
模拟键盘输入
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from selenium.webdriver.common.keys import Keys
# 模拟 Ctrl+C
actions.key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()

设置请求参数

在使用 Selenium 时,有些时候会因为自动化请求而遇到各种问题,或者想优化爬虫脚本,Options 是一个非常重要的工具,用于定制浏览器的各种行为。

设置无头模式

服务器或无界面环境中运行爬虫,避免显式启动浏览器窗口,节省资源。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from selenium.webdriver.edge.options import Options

options = Options()
options.add_argument("--headless=new")
options.add_argument("--disable-gpu")   # 部分系统需禁用 GPU 避免报错

service = Service(executable_path='D:/msedgedriver.exe')
driver = webdriver.Edge(service=service, options=options)
禁用浏览器弹窗和通知

网站存在弹窗广告、通知提示(如“允许通知”),干扰自动化操作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
options.add_argument("--disable-popup-blocking")  # 禁用弹窗拦截
options.add_argument("--disable-notifications")   # 禁用浏览器通知
设置代理服务器
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
options.add_argument("--proxy-server=http://127.0.0.1:8080")
忽略 HTTPS 证书错误

访问的网站使用自签名证书或存在证书错误,导致浏览器报错。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
options.add_argument("--ignore-certificate-errors")
禁用扩展程序

浏览器默认安装的扩展(如广告拦截插件)干扰页面加载或元素定位。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
options.add_argument("--disable-extensions")  # 禁用所有扩展
options.add_argument("--disable-extensions-except=/path/to/extension")  # 通过扩展 ID 禁用某个扩展
调整窗口大小和显示

需要模拟特定分辨率或最大化窗口。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
options.add_argument("--start-maximized")      # 启动时最大化窗口
options.add_argument("window-size=1920x1080")  # 设置固定窗口大小
设置反爬虫策略
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36") # 设置User-Agent
options.add_argument("--disable-blink-features=AutomationControlled") # 禁用浏览器指纹

实战案例:爬取徐州工业职业技术学院网站新闻

下面将使用 Selenium 库来爬取徐州工业职业技术学院网站上的新闻,并使用 jsonlines 库将爬取的数据输出为 .jsonl 文件。通过这个例子,可以学习到如何使用 Selenium 进行网页抓取、页面滚动控制、元素检查以及如何递归地遍历网站的所有链接。

核心功能函数

  • is_valid(): 检查URL是否属于目标站点的一部分。
  • is_element(): 判断指定元素是否存在。
  • smooth_scrol(): 控制页面平滑滚动,帮助加载所有动态内容。
  • fetch_page_content(url): 获取并返回指定URL的内容。
  • parse_articles_and_links(url): 解析页面中的文章信息和内部链接。
  • crawl(url): 主爬虫逻辑,递归调用自身处理新发现的链接。

通过这些函数,实现了从目标网站上自动提取新闻文章的功能,并将结果保存至本地文件。

数据提取与存储

对于每篇文章,脚本会提取标题、作者、日期和正文内容,并将其格式化后保存到 .jsonl 文件中。这种方法非常适合处理大量数据,因为 .jsonl 文件允许逐行添加记录,而不需要一次性加载整个文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
with jsonlines.open(os.path.join(file_path, 'articles.jsonl'), mode='a') as f:
    f.write(article)

递归的遍历网站

在这个脚本中,crawl() 函数是核心部分,它负责从一个起始 URL 开始,递归地探索并抓取整个网站的内容,从一个页面开始,提取其所有链接,并对每个新发现的有效链接重复这一过程,直到没有新的链接为止。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def crawl(url):
    """爬取页面"""
    html_content = fetch_page_content(url)
    if not html_content:
        return
    links = parse_articles_and_links(url)
    for link in links:
        crawl(link)  # 递归调用自身处理新链接

crawl 函数内部,首先获取当前页面的内容(fetch_page_content),然后分析页面以提取文章信息和所有内部链接(parse_articles_and_links)。对于每一个新找到的有效链接,都会再次调用 crawl 函数进行处理。这样就形成了一个递归的过程,每次调用都进一步深入网站的一个新区域。当某个页面被访问过(存储在 visited_urls 列表中),或者没有更多的有效链接可探索时,对应的 crawl 调用就会结束,程序返回到上一级调用继续执行,直到最初的调用也完成为止。

代码示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.common.by import By
from urllib.parse import urljoin, urlparse
import os
import jsonlines
import re
import time

file_path = "output"
start_url = "https://www.xzcit.cn/"
visited_urls = []  # 已经访问过的URL
articles = []

service = Service(executable_path='D:/msedgedriver.exe')
driver = webdriver.Edge(service=service)

def is_valid(url):
    """检查URL是否属于目标站点"""
    parsed = urlparse(url)
    return bool(parsed.netloc) and'www.xzcit.cn'in url

def is_element(by, value):
    """检查元素是否存在"""
    try:
        driver.find_element(by, value)
    except:
        returnFalse
    returnTrue

def smooth_scrol(scroll_step=350, wait_time=0.1):
    """
    按照指定步长和等待时间进行页面滚动。
    scroll_step: 每次滚动的像素数
    wait_time: 每次滚动间的等待时间
    """
    driver.execute_script("window.scrollTo({top: 0});")
    # 获取当前文档高度
    last_height = driver.execute_script("return document.body.scrollHeight")
    whileTrue:
        for i in range(0, last_height, scroll_step):
            driver.execute_script(f"window.scrollTo(0, {i});")
            time.sleep(wait_time)  # 控制滚动速度  
        new_height = driver.execute_script("return document.body.scrollHeight")
        if new_height == last_height:
            break
        last_height = new_height

def fetch_page_content(url):
    """获取页面内容"""
    if url in visited_urls:
        returnNone

    print(f"Crawling: {url}")
    visited_urls.append(url)
    try:
        driver.get(url)
    except:
        returnNone

    smooth_scrol()

    html_content = driver.page_source
    return html_content if html_content elseNone

def parse_articles_and_links(url):
    """提取文章信息和内部链接"""
    links = []

    try:
        if is_element(By.CLASS_NAME, 'article'):
            title = driver.find_element(By.CLASS_NAME, 'arti_title').text
            body = driver.find_element(By.CLASS_NAME, 'entry')
            author = driver.find_element(By.CLASS_NAME, 'arti_publisher').text.replace('作者:', '')
            dateStr = driver.find_element(By.CLASS_NAME, 'arti_update').text.replace('日期:', '')
            date = time.strftime('%Y年%#m月%#d日', time.strptime(dateStr, '%Y-%m-%d'))
            content = ''
            for p in body.find_elements(By.TAG_NAME, 'p'):
                if p.text != '':
                    content += p.text + '\n'
            content = "".join(re.split('\xa0| ', content))

            if content != '':
                article = {'date': date, 'author': author, 'title': title, 'content': content}
                articles.append(article)
                print(article)
                with jsonlines.open(os.path.join(file_path, 'articles.jsonl'), mode='a') as f:
                    f.write(article)
    except Exception as e:
        print("发生异常:", repr(e))

    # 提取页面中的所有链接
    for a in driver.find_elements(By.TAG_NAME, 'a'):
        link = a.get_attribute("href")
        full_link = urljoin(url, link)
        if is_valid(full_link) and full_link notin visited_urls and full_link notin links :
            links.append(full_link)
            print(full_link)

    return links

def crawl(url):
    """爬取页面"""
    html_content = fetch_page_content(url)
    ifnot html_content:
        return

    links = parse_articles_and_links(url)
    
    for link in links:
        crawl(link)  # 递归调用自身处理新链接

if __name__ == '__main__':
    ifnot os.path.exists(file_path):
        os.makedirs(file_path)

    crawl(start_url)
    driver.quit()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 土味儿编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
敏捷技术学习【1】
今天是2018年的最后一天,这两天一番对自己的2019年也制定一些可行可期的年度计划,并尝试克服一些自己人性的弱点去坚持实施下来。
efonfighting
2019/08/02
3620
敏捷技术学习【1】
敏捷开发
现在有许多公司专门从事软件开发项目。他们中的一些人正在使用标准的业务方法(瀑布),有些人已经涉及敏捷原则。产品开发人员和开发团队一直在寻找更有效的生产方式。虽然瀑布过程在过去被广泛采用,但越来越多的团队正在转向敏捷开发,这是一种现代化的项目管理和产品开发方法。在本文档中,我们想向您介绍敏捷的世界,并揭示与在工作中使用敏捷方法的开发团队合作的好处。
杜金房
2022/12/12
1.3K0
敏捷开发
深入核心的敏捷开发
如何破局? 正如《管理3.0:培养和提升敏捷领导力》所说,所有变革最后的失败都是管理的问题。应该把绩效考核这种管理手段当成『敏捷铁三角』中一角来对待,那就是调整约束
yeedomliu
2021/03/16
1.4K0
深入核心的敏捷开发
关于敏捷开发的思考
刚接触敏捷一个月左右,看各种设计模式、TDD、scrum、xp,但是当别人问到我什么是敏捷开发的时候,还是不知道怎么去回答,所以就想着,是时候理一下这些天学习的关于敏捷的所有,在心里搭一个框架。
刘开心_1266679
2019/02/14
6620
关于敏捷开发的思考
敏捷项目管理介绍及实施
敏捷开发 Scrum Scrum就像你的丈母娘,不断支出你的问题在哪,错在哪 Scurm只是不断的暴露你的问题
Freedom123
2024/03/29
2950
敏捷项目管理介绍及实施
敏捷开发流程之Scrum:3个角色、5个会议、12原则
本文主要从Scrum的定义和目的、敏捷宣言、Scrum中的人员角色、Scrum开发流程、敏捷的12原则等几方面帮助大家理解Scrum敏捷开发的全过程。
宜信技术学院
2020/01/07
13K0
敏捷开发流程之Scrum:3个角色、5个会议、12原则
【软件工程】敏捷开发:促进创新、高效交付的软件工程方法
在现代软件开发领域中,敏捷开发已经成为一种备受推崇的方法。通过其灵活性、迭代性和注重团队协作的特点,敏捷开发在推动软件工程的发展和成功项目交付方面发挥了关键作用。本文将深入探讨敏捷开发的核心原则、实践方法以及它在当今软件行业中的重要性。
人不走空
2024/02/21
2890
[转] Agile Software Development 敏捷软件开发
  敏捷开发是一种软件开发方法,基于迭代和增量开发,通过自组织,跨团队,沟通协作完成开发工作。
Edison Zhou
2018/08/20
7120
[转] Agile Software Development 敏捷软件开发
敏捷开发:5种主流开发方法介绍
极限编程(ExtremeProgramming,简称XP)是由KentBeck在1996年提出的。极限编程是一个轻量级的、灵巧的软件开发方法;同时它也是一个非常严谨和周密的方法。XP是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期;通过积极的交流、反馈以及其它一系列的方法,开发人员和客户可以非常清楚开发进度、变化、待解决的问题和潜在的困难等,并根据实际情况及时地调整开发过程。
DevOps时代
2019/07/30
2K0
敏捷 | 如何正确理解敏捷?
在过去的五年时间里,我所在的公司和团队一直使用的都是敏捷开发模式,我也在2018年底获取了Scrum联盟的CSM认证,对于敏捷的理解也是从最初的感性认识到现在的理性认识。今天开始和你一起重新温习敏捷,先来正确理解一下敏捷吧。
Edison Zhou
2020/12/25
8780
敏捷 | 如何正确理解敏捷?
.NET 云原生架构师训练营(模块二 基础巩固 敏捷开发)--学习笔记
从60年代中期开始到20世纪末,软件行业得到了非常迅猛的发展,软件系统的规模和复杂度也越来越高,行业普遍面临不满足需求,永远无法交付等一系列严重的问题,史称“软件危机”
郑子铭
2021/01/18
1.8K0
.NET 云原生架构师训练营(模块二 基础巩固 敏捷开发)--学习笔记
敏捷软件开发简述
前言:由于我读了邹欣老师的《构建之法:现代软件工程(第二版)》,因此对敏捷软件开发有了比较大的兴趣。于是我在网上找了一些论文,比如Requirements Engineering and Agile Software Development、A decade of agile methodologies: Towards explaining agile software development。在读了这些论文之后,对敏捷软件开发有了大致的了解。这篇博文主要是简单介绍敏捷软件开发,重点集中在主要的敏捷开发方法和它的优势,同时也作为一个备忘录,来记录我在这个过程中收获到的重要的知识。
庞小明
2018/09/19
1.5K0
敏捷软件开发简述
敏捷开发入门普及
*****三个角色,三个工件,四个流程(五个事件),四大支柱,五大价值观*****
RobinsonZhang
2018/08/28
1.6K0
敏捷开发入门普及
什么是敏捷软件开发?
Scrum是一个框架,在这个框架中,人们可以解决复杂的适应性问题,同时高效、创造性地交付最高价值的产品。它用于管理软件项目、产品或应用程序开发。它的重点是自适应产品开发策略,其中跨职能团队作为一个单位,在2-4周内(Sprint)达到一个共同的目标。它由价值、工件、角色、仪式、规则和最佳实践组成。
增强现实核心技术产业联盟
2020/06/12
1.5K0
什么是敏捷软件开发?
什么是敏捷框架 Scrum 中的 “3355”?
接触过敏捷的我们,一定对Scrum都不陌生,Scrum是众多轻量级敏捷框架中应用最广泛的一种。
DevOps时代
2019/03/08
10.6K0
什么是敏捷框架 Scrum 中的 “3355”?
敏捷开发:拥抱变化,持续交付价值的艺术
在快速变化的技术和市场环境中,软件开发项目面临着前所未有的挑战。传统的瀑布模型,尽管在某些情况下仍然有效,但往往因为其僵化和缺乏灵活性而受到批评。敏捷开发,作为一种新兴的软件开发方法论,应运而生,旨在解决这些问题,提供一种更加灵活、响应快速的开发方式。
正在走向自律
2024/12/18
2600
敏捷开发:拥抱变化,持续交付价值的艺术
敏捷开发实践(一)--谈谈我对敏捷开发的理解
随着敏捷开发越来越流行,人人都在谈敏捷,人人也都在学习scrum等敏捷开发方法。。。当然,自己也是敏捷开发的实施者和受益者。
程序猿小亮
2021/01/29
1.5K0
ThoughtWorks的敏捷开发 | 洞见
ThoughtWorks的敏捷开发方法一直是一种神秘存在。在敏捷开发还没有主流化的年代,为了让外界理解ThoughtWorks全球团队怎么做敏捷,我们商定了一个“60% Scrum + 40% XP”的经典答案。当然其实ThoughtWorks的敏捷开发既不是Scrum,也不是XP。
ThoughtWorks
2018/08/03
1.3K0
ThoughtWorks的敏捷开发 | 洞见
【敏捷1.2】敏捷宣言的官方解释:12条敏捷原则
上一篇文章中说到的敏捷宣言,可以说是整个敏捷体系中最精髓的部分了。说实话,不仅你觉得,我也觉得这四句话有点太简单,太抽象了。难道真正的敏捷只是遵循这四句话就可以了吗?不要 too young too simple 了。
硬核项目经理
2023/03/09
7310
【敏捷1.2】敏捷宣言的官方解释:12条敏捷原则
远程项目交付的敏捷管理
对于日益重要的国际化市场,越来越多的离岸项目(内包或外包)在进行中,即需求方/客户在A地,开发团队在B地甚至海外。这种情形下,常见的敏捷实践活动也都是适用的。敏捷和精益关注的是价值观和原则。价值观也是文化的一部分,因此需要和离岸团队交谈并学习如何共同工作才能建立。本文内容也适用于任何远程项目的敏捷管理。
用户10443079
2023/03/22
1K0
远程项目交付的敏捷管理
相关推荐
敏捷技术学习【1】
更多 >
LV.2
程序员
目录
  • 什么是 Selenium
  • 环境搭建与配置
    • 安装 Selenium
    • 下载浏览器驱动
  • 基础操作
    • 启动浏览器并访问网页
    • 定位网页元素
      • 通过 ID 定位
      • 通过 CSS 选择器定位
      • 通过 XPath 定位
    • 与元素交互
      • 提取数据
      • 交互操作
    • 设置等待时间
    • 切换页面
    • 执行 JavaScript 代码
    • 关闭浏览器
  • 进阶技巧
    • 使用 ActionChains 模拟用户操作
      • 常用方法
      • 模拟鼠标悬停点击菜单项
      • 模拟键盘输入
    • 设置请求参数
      • 设置无头模式
      • 禁用浏览器弹窗和通知
      • 设置代理服务器
      • 忽略 HTTPS 证书错误
      • 禁用扩展程序
      • 调整窗口大小和显示
      • 设置反爬虫策略
  • 实战案例:爬取徐州工业职业技术学院网站新闻
    • 核心功能函数
    • 数据提取与存储
    • 递归的遍历网站
    • 代码示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档