Selenium获取企业SSIC描述时触发TimeoutException问题求助
解决Selenium检索SSIC时的TimeoutException错误
问题根源
你的TimeoutException本质是CSS选择器错误:
原选择器.bizpara1 text_uppercase会查找带有bizpara1类的元素下的<text_uppercase>标签,但实际目标元素是同时拥有bizpara1和text_uppercase两个类的<span>标签。正确的多类选择器应该用点连接且无空格:.bizpara1.text_uppercase。
稳定性优化建议
除了修正选择器,还可以做这些调整提升代码可靠性:
- 延长等待时间到15秒,应对目标网站可能的加载延迟
- 输入UEN前先清空输入框,避免残留内容干扰
- 获取元素的
text属性而非直接打印元素对象,得到实际的SSIC描述 - 添加异常处理,防止单个UEN查询失败中断整个流程
- 循环结束后关闭浏览器释放资源
修正后的完整代码
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 d = webdriver.Chrome() search = ['199904446R', '200514781N', '198500528C'] try: for UEN in search: d.get('https://www.tis.bizfile.gov.sg/ngbtisinternet/faces/oracle/webcenter/portalapp/pages/TransactionMain.jspx?selectedETransId=dirSearch') # 等待输入框加载完成,清空后输入UEN input_box = WebDriverWait(d, 15).until(EC.visibility_of_element_located((By.ID, "pt1:r1:0:sv1:it1::content"))) input_box.clear() input_box.send_keys(UEN) # 等待提交按钮可点击后点击 submit = WebDriverWait(d, 15).until(EC.element_to_be_clickable((By.ID, "pt1:r1:0:sv1:cb1"))) submit.click() # 等待SSIC元素加载并获取文本内容 ssic_element = WebDriverWait(d, 15).until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".bizpara1.text_uppercase"))) print(f"UEN {UEN} 的SSIC描述: {ssic_element.text}") finally: d.quit()
额外排查点
如果修正后仍报错,可检查以下内容:
- 网站是否存在iframe:通过
d.find_elements(By.TAG_NAME, "iframe")确认,若有则需先切换到对应iframe再查找元素 - 是否触发反爬机制:可尝试添加短时间随机延迟(如
import time; time.sleep(2)),但优先使用显式等待而非强制等待
内容的提问来源于stack exchange,提问作者Eun_G
相关产品推荐
相关产品推荐

