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
相关产品推荐
相关产品推荐

