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

Python提交表单后如何获取输出?Selenium爬取tweeterid问题修复

问题根因

你当前代码拿不到正确结果有几个核心问题:

  • WebDriverWait(driver, 10)只是初始化了等待对象,没有绑定任何等待判断条件,代码点击按钮后会立刻执行抓源码的逻辑,此时前端JS还没完成计算、输出框还没更新,拿到的自然是默认提示文本。
  • 代码漏导入了WebDriverWait依赖的相关模块,实际运行首先会触发名称错误;另外每次调用函数都不关闭浏览器实例,会残留大量Chrome进程占用系统资源。
  • 存在冗余逻辑:页面内容更新后不需要重新拉取全量HTML再用BeautifulSoup解析,直接读取输出框元素的文本效率更高。
修复后的完整代码

爬取目标站点:tweeterid.com

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By

def getTwitterID(name):
    options = webdriver.ChromeOptions()
    options.add_argument('--no-sandbox')
    options.add_argument('start-maximized')
    options.add_argument('enable-automation')
    options.add_argument('--disable-infobars')
    options.add_argument('--disable-dev-shm-usage')
    options.add_argument('--disable-browser-side-navigation')
    options.add_argument("--remote-debugging-port=9222")
    # 需要无头模式就放开下面这行注释,用新版无头参数兼容性更好
    # options.add_argument("--headless=new")
    options.add_argument('--disable-gpu')
    options.add_argument('--log-level=3')
    driver = webdriver.Chrome('chromedriver', options=options)
    driver.maximize_window()
    try:
        driver.get("https://tweeterid.com/")
        # 提前定位页面元素
        input_box = driver.find_element(By.ID, "twitter")
        convert_btn = driver.find_element(By.ID, "twitterButton")
        output_box = driver.find_element(By.CSS_SELECTOR, 'div[class*="output"]')
        # 清空输入框默认内容,传入账号名后点击转换
        input_box.clear()
        input_box.send_keys(name)
        convert_btn.click()
        # 显式等待最多10秒,直到输出框文本不再是默认提示,说明结果已经渲染完成
        WebDriverWait(driver, 10).until(
            lambda d: output_box.text.strip() != "Enter a Twitter ID or @handle on the left above and it will be converted here"
        )
        # 直接返回输出框的结果文本
        return output_box.text.strip()
    finally:
        # 无论执行成功还是报错,都关闭浏览器释放资源
        driver.quit()
使用说明
  • 传入的name参数带不带@前缀都可以,站点本身会做格式兼容
  • 如果需要批量查询,可以把浏览器初始化的逻辑挪到函数外面,不要每次查一个ID就新开一次浏览器,能大幅提升运行速度
  • 不要用固定时长的time.sleep()做等待,网络或者页面加载慢的时候固定等待时长不够还是会拿不到结果,显式等待只要结果渲染完成就会立刻往下执行,稳定性和效率都更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:27:34