selenium在firefox实例已经打开时抛出错误



我使用以下代码搜索谷歌并点击第一个搜索结果。

from selenium import webdriver
import urllib.parse
import time
from selenium.webdriver.firefox.options import Options
options = Options()
options.set_preference("dom.popup_maximum", 100)
options.add_argument("-profile")
options.add_argument("/home/blueray/.mozilla/firefox/5ertyoox.default-release")
options.page_load_strategy = 'eager'
# options.add_extension('fhnegjjodccfaliddboelcleikbmapik.crx')
browser = webdriver.Firefox(options=options)
with open("google-search-terms.adoc") as fin:
for line_no, line in enumerate(fin):
line = line.strip()
query = urllib.parse.urlencode({'q': line + " site:amazon.com"})
browser.execute_script(f"window.open('https://www.google.com/search?{query}');")
time.sleep(5)
for x in range(1, len(browser.window_handles)):
browser.switch_to.window(browser.window_handles[x])
try:
elm = browser.find_elements_by_xpath(
'/html/body/div[7]/div/div[9]/div[1]/div/div[2]/div[2]/div/div/div[1]/div/div/div[1]/a/h3')
if not elm:
elm = browser.find_elements_by_xpath(
'/html/body/div[7]/div/div[9]/div[1]/div/div[2]/div[2]/div/div/div[1]/div/div/div/div[1]/a/h3')
elm[0].click()
except Exception as e:
print("Error", str(e))

但是,如果一个firefox实例是打开的,并且我运行脚本,它会给出消息:

Firefox已经在运行,但是没有响应。要使用Firefox,您需要必须先关闭现有的Firefox进程,重新启动设备,还是使用不同的配置文件

程序终止,出现以下错误:

Traceback (most recent call last):
File "google-search-amazon-less-captcha.py", line 13, in <module>
browser = webdriver.Firefox(options=options)
File "/home/blueray/.local/lib/python3.8/site-packages/selenium/webdriver/firefox/webdriver.py", line 170, in __init__
RemoteWebDriver.__init__(
File "/home/blueray/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
self.start_session(capabilities, browser_profile)
File "/home/blueray/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/home/blueray/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/home/blueray/.local/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: Process unexpectedly closed with status 0

我应该怎么做,这样就不会有错误,即使firefox实例已经打开?

我有同样的问题,但只有当打开的firefox实例具有相同的配置文件,我在脚本中加载。如果从这个脚本中删除配置文件,它应该运行。如果您的代码使用与当前打开的窗口使用的不同的配置文件,它也应该工作。

您也可以使用已弃用的selenium 3方式加载配置文件,这可以避免我的错误。

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile

ffOptions = Options()
ffProfile = FirefoxProfile(r'C:UsersTylerAppDataRoamingMozillaFirefoxProfiles753x1pz.default')
ffOptions.profile = ffProfile
driver = webdriver.Firefox(options=ffOptions)
driver.get("http://www.google.com")

我仍然寻找一个可行的解决方案使用selenium 4设置一个配置文件的方式。

有时,Selenium脚本使web驱动程序打开,而不是正确关闭它们。

一个好的实践将是一个好的try/except/finally块:

driver = webdriver.Firefox()
try:
# Your code
except Exception as e:
# Log or print error
finally:
driver.close()
driver.quit()

同样,你应该尝试杀死所有在你的系统上运行的firefox进程作为python脚本的一部分,使用如下命令:

.....
.....
import os
os.system("taskkill /im geckodriver.exe /f")
os.system("taskkill /im firefox.exe /f")

相关内容

最新更新