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

