使用Helium库时FirefoxProfile报AttributeError错误求助
问题
使用Helium库开发Instagram爬虫时,程序运行20分钟后触发以下错误:
Exception has occurred: AttributeError
'FirefoxProfile' object has no attribute 'binary'
代码片段
def chbrowser(browser): global ig if browser=="f": fprof = webdriver.FirefoxProfile() fprof.set_preference('intl.accept_languages', 'en-US') ig = start_firefox(options=fprof) if browser=="ch": chopt = webdriver.ChromeOptions() chopt.add_argument("--lang=en-US") ig = start_chrome(options=chopt) if __name__=="__main__": chbrowser(input("put browser,firefox=f,chrome=ch: "))
原因及修复方案
核心问题
Helium的start_firefox方法要求传入的options参数是**FirefoxOptions对象**,但你当前传的是FirefoxProfile。Helium内部会尝试访问options的binary属性,而FirefoxProfile没有这个属性,因此抛出错误。运行20分钟后才报错,是因为前期会话未触发属性检查,后续操作(如会话重建、配置读取)才暴露问题。
修复后的代码
替换FirefoxProfile为FirefoxOptions,直接通过options设置偏好:
from selenium.webdriver import FirefoxOptions from helium import start_firefox, start_chrome import webdriver def chbrowser(browser): global ig if browser == "f": options = FirefoxOptions() # 设置语言偏好 options.set_preference('intl.accept_languages', 'en-US') # 若需使用自定义配置文件,可添加此行 # options.profile = webdriver.FirefoxProfile() ig = start_firefox(options=options) elif browser == "ch": chopt = webdriver.ChromeOptions() chopt.add_argument("--lang=en-US") ig = start_chrome(options=chopt) if __name__ == "__main__": chbrowser(input("输入浏览器类型,火狐=f,谷歌=ch: "))
超时问题优化
针对运行20分钟后会话失效的情况,添加异常捕获机制,自动重新初始化浏览器:
def chbrowser(browser): global ig try: # 检查会话是否有效 if ig: ig.current_url except (NameError, Exception): # 会话失效,重新初始化 if browser == "f": options = FirefoxOptions() options.set_preference('intl.accept_languages', 'en-US') ig = start_firefox(options=options) elif browser == "ch": chopt = webdriver.ChromeOptions() chopt.add_argument("--lang=en-US") ig = start_chrome(options=chopt)
内容的提问来源于stack exchange,提问作者Kristián Mundier
相关产品推荐
相关产品推荐

