如何使用Selenium接收用户输入依次打开多个站点并解决运行报错
Selenium批量访问站点脚本异常修复
现有代码核心问题
- 直接触发空白页报错的根因:
list.append()属于列表原地操作方法,返回值为None,你将该方法的返回值赋值给link变量后,for循环实际遍历的不是有效URL列表,driver.get()接收到无效参数,Chrome就只会打开默认的data:,空白标签页。 - URL补全逻辑完全错误:你初始化的
http列表只有['http://']一个元素,直接把用户输入拆分后的整个列表append进去,会得到嵌套列表结构,根本没有给每个不带协议的域名单独拼接前缀。 - 浏览器生命周期不符合需求:你在循环外只启动了一次浏览器,所有链接都在同一个实例中打开,和「处理完一个链接就关闭浏览器,再启动新实例打开下一个」的预期不符。
- 没有做协议判断:不管用户输入的链接有没有带
http:///https://前缀都硬拼接,会把本来合法的HTTPS链接改成错误格式。
修复后可直接运行的代码
from selenium import webdriver from time import sleep # 配置项: chromedriver路径、单页面等待时长 CHROME_DRIVER_PATH = r'C:\...\chromedriver.exe' WAIT_DURATION = 4 # 接收用户输入,按空格拆分得到多个站点 site_list = input('请输入多个站点链接,使用空格分隔:').split() for site in site_list: # 补全URL协议:已有http/https前缀的链接直接使用,无协议的自动拼接http:// if site.startswith(('http://', 'https://')): target_url = site else: target_url = f'http://{site}' # 每个链接单独启动浏览器实例 driver = webdriver.Chrome(executable_path=CHROME_DRIVER_PATH) driver.set_window_size(1920, 1080) driver.get(target_url) sleep(WAIT_DURATION) # 当前链接处理完成,关闭浏览器 driver.quit()
修改说明
- 移除了错误的append赋值逻辑,直接遍历用户输入拆分后的站点列表逐个处理
- 优化协议补全逻辑:提前判断链接是否已有合法协议头,仅对裸域名拼接
http://,不会破坏原有正常链接 - 将浏览器的启动、关闭操作移到循环内部,严格匹配「单链接对应单独浏览器实例,处理完即关闭」的需求
- 把可配置的路径、等待时长抽成常量,后续修改参数更方便
注:如果你使用的是Selenium 4.6及以上版本,内置了Selenium Manager自动匹配驱动,可以删掉
executable_path参数,不需要手动指定chromedriver路径。
内容的提问来源于stack exchange,提问作者ghettoflexer
相关产品推荐
相关产品推荐

