Selenium谷歌搜索机器人 循环读取search.txt新关键词实现
需求说明
开发基于Python Selenium的谷歌搜索机器人,需满足以下要求:
- 每次从
search.txt文件中读取新的一行内容作为搜索词 - 机器人自动访问google.com,循环执行搜索操作
- 每轮搜索必须使用新读取的行内容作为搜索关键词,不可固定使用单一关键词
原有代码问题
原有实现存在以下缺陷,无法满足需求:
- 读取文件后仅固定取第一行内容作为搜索词,没有逐行遍历所有搜索词的逻辑
- 搜索框输入内容后没有触发提交动作,无法完成实际搜索
- 每轮循环新建浏览器实例但未做资源释放,长时间运行会造成内存占用过高
- 读取文件时未做空行过滤,容易触发空关键词的运行异常
- 残留无意义的按冒号分割字符串逻辑,属于其他场景遗留的错误代码
修正后完整代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import time def find_element_send_text(driver, location_of_the_element, type_message): """ :param driver: 浏览器驱动实例 :param location_of_the_element: 目标网页元素的XPATH路径 :param type_message: 需要输入到元素的文本内容 循环等待元素加载完成后,清空内容、输入目标文本并提交 """ while True: try: element = driver.find_element(By.XPATH, location_of_the_element) element.clear() element.send_keys(type_message) # 输入完成后按回车触发搜索 element.send_keys(Keys.ENTER) break except Exception: pass def load_search_keywords(): # 读取search.txt文件,过滤空行、去除每行首尾空白字符 with open('search.txt', 'r', encoding='utf-8') as f: keywords = [line.strip() for line in f.readlines() if line.strip()] return keywords if __name__ == "__main__": keyword_list = load_search_keywords() search_input_xpath = "//input[@class='gLFyf gsfi']" # 遍历所有关键词,每轮使用新关键词执行搜索 for keyword in keyword_list: print(f"正在搜索关键词:{keyword}") driver = webdriver.Chrome() try: driver.get("https://www.google.com/") driver.maximize_window() find_element_send_text(driver, search_input_xpath, keyword) # 搜索结果页停留时长可根据实际需求调整 time.sleep(5) finally: # 确保每轮执行完成后关闭浏览器,释放资源 driver.quit()
关键修正点
- 重构关键词加载逻辑:读取文件时自动过滤空行、处理换行符和首尾空格,避免无效搜索,兼容中文关键词读取
- 替换固定取首行的错误逻辑:遍历所有有效关键词列表,每轮循环自动切换新的搜索词
- 补全搜索提交动作:引入
Keys模块,输入关键词后自动按回车触发搜索 - 优化资源管理:新增
try/finally逻辑,无论搜索过程是否报错,都会在轮次结束后关闭浏览器,避免内存泄漏 - 优化函数传参:将浏览器驱动作为参数传入元素操作函数,避免全局变量引发的跨轮次调用异常
内容的提问来源于stack exchange,提问作者Ali Ashraf
相关产品推荐
相关产品推荐

