使用Pandas与Selenium时,过滤后无法读取目标行的问题求助
问题分析与修正方案
原代码存在的核心问题
- 遍历对象错误:代码遍历的是未筛选的原始表格
planilha,而非筛选后的planilha_filtrada,导致无法仅处理状态为Cadastrado的行。 - 取值逻辑错误:
row[planilha_filtraChassi]的写法不符合pandas行取值规则,无法正确获取底盘号。 - 资源浪费:每次循环都新建并销毁浏览器实例,效率极低。
- 无效注释:代码中的
**#Chasssi number filter**是Markdown格式,在Python中不生效,需改为普通注释。
修正后的代码
import pandas as pd from selenium import webdriver from selenium.webdriver.common.by import By import time # 读取Excel文件,若xlsm格式读取失败,可添加engine参数(如engine='openpyxl') planilha = pd.read_excel("REL_COMUNICADO_DE_VENDA.xlsm") # 筛选状态为Cadastrado的行 planilha_filtrada = planilha[planilha['Situação'] == 'Cadastrado'] # 提取有效底盘号(去除空值并转为列表) chassis_numbers = planilha_filtrada['Nº Chassi'].dropna().tolist() # 初始化浏览器(仅执行一次,避免重复创建资源) navegador = webdriver.Chrome() for chassis in chassis_numbers: navegador.get("http://www.google.com") time.sleep(2) # 定位搜索框并填入底盘号 search_box = navegador.find_element(By.XPATH, '//*[@id="APjFqb"]') search_box.send_keys(chassis) time.sleep(2) # 点击搜索按钮 navegador.find_element(By.CLASS_NAME,'gNO89b').click() time.sleep(2) # 所有任务完成后关闭浏览器 navegador.quit()
关键优化说明
- 筛选逻辑落地:直接基于筛选后的表格提取底盘号,确保只处理目标数据。
- 空值处理:通过
dropna()过滤空的底盘号,避免无效输入。 - 资源优化:浏览器实例仅初始化一次,循环结束后统一关闭,大幅提升运行效率。
- 代码可读性:变量名更直观,取值逻辑简化,便于后续维护。
内容的提问来源于stack exchange,提问作者Tiago Ribeiro Santos
相关产品推荐
相关产品推荐

