Selenium with Firefox:FirefoxProfile 在第二次使用时停止工作
Selenium with Firefox: FirefoxProfile stops working when used a second time
我正在尝试将 selenium 与 firefox 结合使用来创建我想重复使用的浏览器的配置文件。我首先用我想要的扩展加载它,然后调用一个函数,将该配置文件作为参数用于抓取。
profile = webdriver.FirefoxProfile()
profile.add_extension(extension='extension/1/path')
profile.add_extension(extension='extension/2/path')
def sele_scrape(profile,url):
options = Options()
options.headless = True
driver = webdriver.Firefox(firefox_profile=profile,options=options,executable_path='path/to/geckodriver')
driver.get(url)
source=driver.page_source
driver.quit()
sele_scrape(profile,'url1')
sele_scrape(profile,'url2')
URL 的顺序或我使用的 URL 并不重要。第二个总是导致这个错误:
File "(the python file for this project)", line 37, in <module>
sele_scrape(profile,'url2')
File "(the python file for this project)"
driver = webdriver.Firefox(firefox_profile=profile,options=options,executable_path='path/to/geckodriver')
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/firefox/webdriver.py", line 166, in __init__
capabilities.update(options.to_capabilities())
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/firefox/options.py", line 180, in to_capabilities
opts["profile"] = self._profile.encoded
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/firefox/firefox_profile.py", line 173, in encoded
self.update_preferences()
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/firefox/firefox_profile.py", line 102, in update_preferences
self._write_user_prefs(self.default_preferences)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/firefox/firefox_profile.py", line 226, in _write_user_prefs
with open(self.userPrefs, "w") as f:
FileNotFoundError: [Errno 2] No such file or directory: '/var/folders/8j/lrckmwqs5bs9b4srrjbj6r5c0000gn/T/tmpiluv90lz/user.js'
这一行
FileNotFoundError: [Errno 2] No such file or directory: '/var/folders/8j/lrckmwqs5bs9b4srrjbj6r5c0000gn/T/tmpiluv90lz/user.js'
对我来说特别奇怪,因为我不知道它试图指的是什么,也不知道为什么。
任何帮助,甚至只是我可以寻找的方向,将不胜感激!
可能当您 quit()
然后它会删除个人资料 - 您将不得不重新创建个人资料。
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
# --- functions ---
def sele_scrape(url):
profile = webdriver.FirefoxProfile()
#profile.add_extension(extension='extension/1/path')
#profile.add_extension(extension='extension/2/path')
options = Options()
#options.headless = True
driver = webdriver.Firefox(firefox_profile=profile, options=options)#,executable_path='path/to/geckodriver')
driver.get(url)
source = driver.page_source
driver.quit()
# --- main ---
sele_scrape('https://whosebug.com')
sele_scrape('https://whosebug.com')
如果我使用 close()
而不是 quit()
,代码可以正常工作
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
# --- functions ---
def sele_scrape(url, profile, options):
driver = webdriver.Firefox(firefox_profile=profile, options=options)#,executable_path='path/to/geckodriver')
driver.get(url)
source = driver.page_source
driver.close()
# --- main ---
profile = webdriver.FirefoxProfile()
#profile.add_extension(extension='extension/1/path')
#profile.add_extension(extension='extension/2/path')
options = Options()
#options.headless = True
sele_scrape('https://whosebug.com', profile, options)
sele_scrape('https://whosebug.com', profile, options)
坦率地说,如果应该重用配置文件,那么我将只创建一次 driver
,然后跳过 close()
。
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
# --- functions ---
def sele_scrape(url, driver):
driver.get(url)
source = driver.page_source
# --- main ---
profile = webdriver.FirefoxProfile()
#profile.add_extension(extension='extension/1/path')
#profile.add_extension(extension='extension/2/path')
options = Options()
#options.headless = True
driver = webdriver.Firefox(firefox_profile=profile, options=options)#,executable_path='path/to/geckodriver')
sele_scrape('https://whosebug.com', driver)
sele_scrape('https://whosebug.com', driver)
driver.close()
我正在尝试将 selenium 与 firefox 结合使用来创建我想重复使用的浏览器的配置文件。我首先用我想要的扩展加载它,然后调用一个函数,将该配置文件作为参数用于抓取。
profile = webdriver.FirefoxProfile()
profile.add_extension(extension='extension/1/path')
profile.add_extension(extension='extension/2/path')
def sele_scrape(profile,url):
options = Options()
options.headless = True
driver = webdriver.Firefox(firefox_profile=profile,options=options,executable_path='path/to/geckodriver')
driver.get(url)
source=driver.page_source
driver.quit()
sele_scrape(profile,'url1')
sele_scrape(profile,'url2')
URL 的顺序或我使用的 URL 并不重要。第二个总是导致这个错误:
File "(the python file for this project)", line 37, in <module>
sele_scrape(profile,'url2')
File "(the python file for this project)"
driver = webdriver.Firefox(firefox_profile=profile,options=options,executable_path='path/to/geckodriver')
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/firefox/webdriver.py", line 166, in __init__
capabilities.update(options.to_capabilities())
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/firefox/options.py", line 180, in to_capabilities
opts["profile"] = self._profile.encoded
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/firefox/firefox_profile.py", line 173, in encoded
self.update_preferences()
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/firefox/firefox_profile.py", line 102, in update_preferences
self._write_user_prefs(self.default_preferences)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/firefox/firefox_profile.py", line 226, in _write_user_prefs
with open(self.userPrefs, "w") as f:
FileNotFoundError: [Errno 2] No such file or directory: '/var/folders/8j/lrckmwqs5bs9b4srrjbj6r5c0000gn/T/tmpiluv90lz/user.js'
这一行
FileNotFoundError: [Errno 2] No such file or directory: '/var/folders/8j/lrckmwqs5bs9b4srrjbj6r5c0000gn/T/tmpiluv90lz/user.js'
对我来说特别奇怪,因为我不知道它试图指的是什么,也不知道为什么。
任何帮助,甚至只是我可以寻找的方向,将不胜感激!
可能当您 quit()
然后它会删除个人资料 - 您将不得不重新创建个人资料。
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
# --- functions ---
def sele_scrape(url):
profile = webdriver.FirefoxProfile()
#profile.add_extension(extension='extension/1/path')
#profile.add_extension(extension='extension/2/path')
options = Options()
#options.headless = True
driver = webdriver.Firefox(firefox_profile=profile, options=options)#,executable_path='path/to/geckodriver')
driver.get(url)
source = driver.page_source
driver.quit()
# --- main ---
sele_scrape('https://whosebug.com')
sele_scrape('https://whosebug.com')
如果我使用 close()
而不是 quit()
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
# --- functions ---
def sele_scrape(url, profile, options):
driver = webdriver.Firefox(firefox_profile=profile, options=options)#,executable_path='path/to/geckodriver')
driver.get(url)
source = driver.page_source
driver.close()
# --- main ---
profile = webdriver.FirefoxProfile()
#profile.add_extension(extension='extension/1/path')
#profile.add_extension(extension='extension/2/path')
options = Options()
#options.headless = True
sele_scrape('https://whosebug.com', profile, options)
sele_scrape('https://whosebug.com', profile, options)
坦率地说,如果应该重用配置文件,那么我将只创建一次 driver
,然后跳过 close()
。
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
# --- functions ---
def sele_scrape(url, driver):
driver.get(url)
source = driver.page_source
# --- main ---
profile = webdriver.FirefoxProfile()
#profile.add_extension(extension='extension/1/path')
#profile.add_extension(extension='extension/2/path')
options = Options()
#options.headless = True
driver = webdriver.Firefox(firefox_profile=profile, options=options)#,executable_path='path/to/geckodriver')
sele_scrape('https://whosebug.com', driver)
sele_scrape('https://whosebug.com', driver)
driver.close()