seleniumpython使用教程:自动登录+数据爬取+反爬规避实战案例详解

admin python教程 3


用 Python 做自动化的朋友,是不是常遇到这些头疼事?写了自动登录脚本,要么点不到登录按钮,要么输完账号密码没反应;好不容易登录成功,爬数据时网页加载半天没动静,等拿到数据早就超时了;更气人的是,爬没几条就被网站检测到,直接弹出验证码或者封号,辛苦写的代码全白搭?别慌,今天兔子哥就带大家用 Selenium+Python 实战,从自动登录到数据爬取,再到反爬规避,每个步骤都附案例代码,新手跟着做也能少踩坑。

一、自动登录实战:从环境检查到代码跑通


自动登录看着简单,其实细节多,一步错就可能失败。咱们以某论坛登录为例,一步步拆解:

1. 先做这 3 件事,避免开头就卡壳


  • 检查环境:确保 Python、Selenium 库(pip install selenium)、对应浏览器驱动都装好,驱动版本和浏览器版本得对上,不然会报 “找不到驱动” 的错。
  • 分析登录页面:打开目标网站登录页,按 F12 打开开发者工具,看看用户名输入框、密码框、登录按钮的元素属性,记好它们的 ID 或 XPath,这是定位的关键。
  • 预判登录流程:有些网站登录后会跳验证码,新手可以先找不需要验证码的网站练手,比如内部测试平台或论坛。

2. 登录代码怎么写?附实战示例


直接上代码框架,跟着填内容就行:
python
from selenium import webdriverfrom selenium.webdriver.common.by import Byimport time# 初始化浏览器driver = webdriver.Chrome()# 打开登录页driver.get("目标网站登录地址")# 等页面加载1秒(新手别省这步)time.sleep(1)# 定位并输入用户名(替换成你的元素定位)driver.find_element(By.ID, "username").send_keys("你的账号")# 定位并输入密码driver.find_element(By.ID, "password").send_keys("你的密码")# 点击登录按钮driver.find_element(By.XPATH, "//button[@class='login-btn']").click()# 登录后等跳转time.sleep(2)# 打印登录后的标题,验证是否成功print(driver.title)

是不是很简单?但有朋友会问:“为什么我点登录没反应?” 大概率是元素定位错了,试试换 XPath 定位,或者看看按钮是不是在 iframe 里,这种情况得先切换 iframe 才能定位。

二、数据爬取步骤:从页面解析到数据保存


登录成功后就该爬数据了,以爬取商品列表为例,教大家怎么高效提取信息:

1. 爬数据前必做的 2 个准备


  • 分析数据位置:打开目标页面,看看要爬的内容(比如商品名称、价格)在网页源码里的位置,用开发者工具的 “选择元素” 功能点一下就能看到对应代码。
  • 设置合理等待:网页数据可能动态加载,直接爬容易拿到空值。推荐用显式等待,等元素出现再爬,比 time.sleep () 更灵活:

python
from selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as EC# 等商品列表加载出来,最多等10秒wait = WebDriverWait(driver, 10)goods_list = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "goods-list")))

2. 数据提取和保存技巧


提取数据可以用 find_elements 批量定位,比如爬商品名称:
python
# 定位所有商品名称元素name_elements = driver.find_elements(By.CLASS_NAME, "goods-name")# 提取文本存到列表goods_names = [name.text for name in name_elements]# 同理提取价格price_elements = driver.find_elements(By.CLASS_NAME, "goods-price")goods_prices = [price.text for price in price_elements]

保存数据新手推荐用 CSV 格式,简单易操作:
python
import csv# 写入CSV文件with open("goods_data.csv", "w", newline="", encoding="utf-8") as f:writer = csv.writer(f)writer.writerow(["商品名称", "价格"])for name, price in zip(goods_names, goods_prices):writer.writerow([name, price])

三、反爬规避技巧:3 个实用方法亲测有效


爬数据最烦反爬,分享几个新手能用上的技巧,亲测能减少被封概率:
反爬场景规避方法操作难度
检测浏览器特征给浏览器加启动参数伪装成真实用户★★☆☆☆
频繁请求被封加随机等待时间,模拟人类操作节奏★★☆☆☆
验证码拦截遇到简单验证码手动输入,复杂的换 IP★★★☆☆

1. 伪装浏览器很重要


Selenium 默认的浏览器特征容易被识别,启动时加参数伪装一下:
python
options = webdriver.ChromeOptions()# 去掉自动化控制标识options.add_experimental_option("excludeSwitches", ["enable-automation"])# 禁用自动化扩展options.add_experimental_option("useAutomationExtension", False)# 初始化带参数的浏览器driver = webdriver.Chrome(options=options)

2. 模拟人类操作节奏


别让程序唰唰唰一直爬,加随机等待和鼠标移动:
python
import random# 每次操作后随机等待1-3秒time.sleep(random.uniform(1, 3))# 偶尔移动鼠标到某个元素from selenium.webdriver.common.action_chains import ActionChains# 移动到页面顶部的logo位置logo = driver.find_element(By.CLASS_NAME, "logo")ActionChains(driver).move_to_element(logo).perform()

四、新手常见问题问答


  • 问:爬着爬着浏览器闪退怎么办?
    答:在代码最后加一行 input ("爬取完成,按回车关闭"),程序会等你确认再退出,方便看结果。
  • 问:换个网站登录代码就不能用了?
    答:每个网站的元素定位不一样,得重新分析页面改定位方式,这是正常的,多练几个网站就熟了。
  • 问:反爬太严还有必要用 Selenium 吗?
    答:Selenium 适合需要登录或动态加载的场景,反爬特别严的可以试试结合代理 IP,不过新手先把基础用法练熟最重要。

其实用 Selenium+Python 做自动化,关键在多练多试。刚开始别追求复杂功能,把自动登录、简单爬取、基础反爬这三步练熟,再慢慢加难度。兔子哥刚开始练的时候,光登录功能就卡了两天,后来发现是没等页面加载完就操作,加了等待时间就好了。所以遇到问题别着急,一步步排查,大部分问题都能在开发者工具里找到原因。希望这篇教程能帮到想入门的你,动手试试吧,实战出真知!

标签: 'login-btn' .webdriver

发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~