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

Heroku环境下Selenium无法点击下单按钮问题求助

Heroku部署后Selenium无法点击下单按钮

我开发了一个机器人,用于接收数据并在其他网站完成下单操作。本地运行一切正常,但部署到Heroku后,ID为placeOrderBtn的下单按钮始终无法被点击。

已尝试的操作

  • 两种点击方式均无效:
    1. JavaScript执行点击:
    place_order = driver.find_element(By.ID, 'placeOrderBtn')
    driver.execute_script("arguments[0].click();", place_order)
    print('place order: ', place_order)
    
    1. 直接调用元素点击方法:place_order.click()
  • 打印结果显示已成功获取到Selenium元素,但点击无任何响应。

Heroku使用的Chrome配置参数

chrome_options.binary_location = os.environ.get("GOOGLE_CHROME_BIN")
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("start-maximized")
chrome_options.add_argument("--no-sandbox")
driver = webdriver.Chrome(executable_path=os.environ.get("CHROMEDRIVER_PATH"), options=chrome_options)
  • 曾尝试将start-maximized改为--start-maximized,问题仍未解决。

按钮HTML结构说明

从截图可见,目标按钮为<button>标签,ID为placeOrderBtn,包含文本"PLACE ORDER",且带有disabled属性。


解决建议

1. 移除按钮的禁用属性

截图显示按钮带有disabled属性,这是点击无效的直接原因。可以通过JavaScript先移除该属性再执行点击:

place_order = driver.find_element(By.ID, 'placeOrderBtn')
# 移除disabled属性
driver.execute_script("arguments[0].removeAttribute('disabled');", place_order)
# 执行点击
driver.execute_script("arguments[0].click();", place_order)

同时要排查页面是否存在未完成的表单校验、必填项等逻辑,这些可能是按钮被禁用的根源,本地环境可能因操作流程差异未触发禁用状态。

2. 添加显式等待确保元素可交互

Heroku的Headless Chrome渲染速度与本地有差异,建议用显式等待替代直接查找,确保按钮处于可点击状态:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 最长等待10秒,直到按钮可点击
place_order = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, 'placeOrderBtn'))
)
place_order.click()

3. 固定Headless模式窗口尺寸

Headless模式默认窗口较小,可能导致元素定位或交互异常,添加固定尺寸参数:

# 替换或补充现有窗口参数
chrome_options.add_argument("--window-size=1920,1080")

4. 排查iframe与遮挡元素

确认按钮是否被弹窗、加载遮罩遮挡,或位于iframe内。若在iframe中,需先切换上下文:

# 定位并切换到目标iframe(示例用ID定位,实际根据页面调整)
driver.switch_to.frame(driver.find_element(By.ID, "target-iframe-id"))
# 查找并点击按钮
place_order = driver.find_element(By.ID, 'placeOrderBtn')
place_order.click()
# 操作完成后切回主文档
driver.switch_to.default_content()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:05:21