使用Selenium批量抓取企业列表时for循环报错求助
Selenium循环抓取企业列表报错?来一步步排查解决!
Hey there!看你想用Selenium自动循环抓取企业列表,但运行时出了问题,我先帮你梳理下代码里的坑,再给你针对性的解决办法~
首先先把你提供的代码整理成规范格式(这里能看到几个明显的语法问题,大概率是报错的源头):
from time import sleep from selenium import webdriver from selenium.webdriver.common.keys import Keys # 注意:Windows下路径要处理转义,或者用原始字符串 driver = webdriver.Chrome(r'D:\webdriver\chromedriver.exe') driver.get('https://www.google.com') sleep(3) search_query = driver.find_element_by_name('q') # 注意字符串要完整闭合,这里最后一个元素看起来截断了,要补全引号 subjectlist = [ "Acsys Inc", "Customs Service Of Republic Of Armenia", "National Security Service Under Government Of Ra", "Aeropuerto Internacional..." # 这里补全完整的企业名称和闭合引号 ]
一、先解决基础语法错误
这些问题会直接导致Python运行报错,必须先修正:
- 导入语句换行:你原本把
from time import sleep和from selenium import webdriver写在一行,这是语法错误,必须分开换行写 - 路径转义:Windows系统的路径反斜杠
\是转义字符,要用双反斜杠\\或者原始字符串(加r前缀),否则会解析错误 - 字符串闭合:
subjectlist最后一个元素的字符串没写完,要确保每个企业名称都有完整的双引号包裹
二、循环抓取时的常见坑(以及解决办法)
假设你后续的循环逻辑是遍历列表逐个搜索,这些是最容易踩的雷:
1. 元素失效报错(StaleElementReferenceException)
当页面跳转后,之前定位的search_query元素会变成"过期元素",无法再使用。解决办法是每次循环都重新定位搜索框:
for subject in subjectlist: # 每次循环重新找到搜索框 search_box = driver.find_element_by_name('q') search_box.clear() # 清空上一次的输入内容 search_box.send_keys(subject) search_box.send_keys(Keys.ENTER) # 这里写你抓取搜索结果的逻辑,比如提取企业信息 # 举个例子:抓取搜索结果标题 results = driver.find_elements_by_css_selector('h3') for result in results: print(result.text) # 回到谷歌首页,准备下一次搜索 driver.get('https://www.google.com') sleep(1)
2. 硬等待不稳定,导致元素找不到
用sleep()是固定时间等待,有时候页面加载慢就会报错。建议改用显式等待,等元素加载完成再操作,稳定性拉满:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 替换sleep(3),等待搜索框出现,最多等10秒 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.NAME, 'q')) )
3. ChromeDriver和Chrome版本不兼容
这是Selenium新手最常遇到的问题!确保你的ChromeDriver版本和本地安装的Chrome浏览器版本完全匹配(比如Chrome是119.x,ChromeDriver也要下载119.x的版本)。如果版本不匹配,会直接启动浏览器失败。
4. ChromeDriver路径找不到
如果运行时提示"找不到chromedriver",除了处理路径转义,还可以:
- 把ChromeDriver放到Python的安装目录里(或者系统环境变量的Path路径中)
- 确保路径里带
.exe后缀(Windows系统下必须)
如果还有具体的报错信息(比如报错栈),可以贴出来,我再帮你精准定位~
内容的提问来源于stack exchange,提问作者Yash Kaushik
相关产品推荐
相关产品推荐

