You need to enable JavaScript to run this app. Python新手结合Selenium与Requests实现网页登录采集数据的代码运行异常求助
优惠活动
大模型
产品
解决方案
定价
更多

Python新手结合Selenium与Requests实现网页登录采集数据的代码运行异常求助

代码问题排查与可运行修正方案

原代码存在的核心问题

  • 会话逻辑完全割裂:同时调用了Selenium和requests两套独立的网络栈,没有做任何会话信息同步。Selenium打开浏览器后的状态和requests创建的Session完全独立,就算requests发了登录请求,也和你打开的浏览器页面没有任何关联。
  • 登录字段为臆造值:代码中写的name[name]、user[pass]没有对照目标站点真实的表单input元素属性,服务端接收时会因为找不到对应字段直接拒绝请求。
  • 基础语法疏漏:s.close 没有添加执行括号,实际运行时并没有触发关闭Session的操作。
  • 缺失核心交互逻辑:Selenium启动后仅完成了打开页面的操作,没有任何定位输入框、填充内容、点击提交的代码步骤,自然无法实现自动填表单、提交登录的效果。

修正方案

根据使用场景可以选择以下两种实现路径:

路径1:纯Selenium实现(适合新手调试,无需手动处理会话、Cookie)

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

# 初始化浏览器驱动
driver = webdriver.Chrome()
target_url = "https://mano.eso.lt"
account = "xxxx@xxxx.com"
password = "yyyyyyy"

# 打开目标站点
driver.get(target_url)
# 等待页面DOM加载完成
time.sleep(2)

# 定位表单元素(需根据实际页面的元素属性调整定位规则)
# 填充账号
driver.find_element(By.ID, "username").send_keys(account)
# 填充密码
driver.find_element(By.ID, "password").send_keys(password)
# 点击登录按钮提交
driver.find_element(By.ID, "login-submit").click()

# 等待登录完成后即可开展后续数据抓取
time.sleep(3)

# 资源清理
driver.quit()

路径2:requests+Selenium混合实现(适合高频爬取,请求性能更高)

核心逻辑是先通过Selenium打开页面拿到会话基础凭证,同步到requests的Session中,再按照真实表单结构构造登录请求,避免Selenium全流程运行的性能损耗。

import time
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
target_url = "https://mano.eso.lt"
account = "xxxx@xxxx.com"
password = "yyyyyyy"

# 打开页面获取基础会话Cookie
driver.get(target_url)
time.sleep(2)

# 创建requests Session,同步浏览器端的Cookie信息
session = requests.Session()
for item in driver.get_cookies():
    session.cookies.set(item["name"], item["value"])

# 按照页面真实表单结构构造提交参数(字段名需和页面input的name属性完全匹配)
login_payload = {
    "login_account": account,
    "login_pwd": password,
    # 部分站点会带CSRF校验字段,需从页面源码中提取
    "csrf_token": driver.find_element(By.NAME, "csrf-token").get_attribute("value")
}

# 发起登录请求
login_resp = session.post(target_url, data=login_payload, allow_redirects=True)
print("登录请求响应码:", login_resp.status_code)

# 资源清理
session.close()
driver.quit()

注意:实际落地时需要打开目标站点登录页,通过浏览器开发者工具检查表单的元素选择器、提交地址、字段名,不要直接照搬示例中的ID和字段值。

内容的提问来源于stack exchange,提问作者Arturas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.30 06:06:07