You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Web Scraping登录按钮置灰问题:MechanicalSoup无法提交登录请求

解决登录按钮置灰无法提交的问题

方法一:用MechanicalSoup手动修改DOM

MechanicalSoup不执行前端JS,所以用户名输入后按钮自动启用的逻辑不会触发。直接修改页面DOM移除按钮的disabled属性即可提交:

from bs4 import BeautifulSoup as bs
import mechanicalsoup

browser = mechanicalsoup.StatefulBrowser(user_agent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0')

username = "username"
password = "Pass123"
url = 'https://myschool.compass.education'

loginpage = browser.open(url)
browser.select_form()

# 填写账号密码
browser["username"] = username
browser["password"] = password

# 移除登录按钮的disabled属性
login_button = browser.form.find("button", type="submit")
if login_button and "disabled" in login_button.attrs:
    del login_button.attrs["disabled"]

# 提交表单
home = browser.submit_selected()

方法二:用支持JS的工具(推荐应对复杂校验)

如果网站有更复杂的JS逻辑(比如实时输入验证、隐藏字段生成),可以用Selenium或Playwright模拟真实浏览器行为:

Selenium示例

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()
url = 'https://myschool.compass.education'
driver.get(url)

# 等待用户名输入框加载并填写
username_input = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.NAME, "username"))
)
username_input.send_keys("username")

# 填写密码
password_input = driver.find_element(By.NAME, "password")
password_input.send_keys("Pass123")

# 等待按钮可点击后提交
login_button = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.TAG_NAME, "button"))
)
login_button.click()

# 提取页面文本
page_text = driver.page_source
driver.quit()

Playwright示例

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.firefox.launch(headless=False)
    page = browser.new_page()
    page.goto('https://myschool.compass.education')

    # 填写表单
    page.fill('input[name="username"]', "username")
    page.fill('input[name="password"]', "Pass123")

    # 点击登录按钮
    page.click('button[type="submit"]')

    # 等待页面加载完成
    page.wait_for_load_state('networkidle')

    # 提取页面文本
    page_text = page.content()
    browser.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 11:15:37