|
|
|
|
@@ -35,6 +35,22 @@ class WaczArchiverEnricher(Enricher, Archiver):
|
|
|
|
|
"socks_proxy_host": {"default": None, "help": "SOCKS proxy host for browsertrix-crawler, use in combination with socks_proxy_port. eg: user:password@host"},
|
|
|
|
|
"socks_proxy_port": {"default": None, "help": "SOCKS proxy port for browsertrix-crawler, use in combination with socks_proxy_host. eg 1234"},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
def setup(self) -> None:
|
|
|
|
|
self.use_docker = os.environ.get('WACZ_ENABLE_DOCKER') or not os.environ.get('RUNNING_IN_DOCKER')
|
|
|
|
|
self.docker_in_docker = os.environ.get('WACZ_ENABLE_DOCKER') and os.environ.get('RUNNING_IN_DOCKER')
|
|
|
|
|
|
|
|
|
|
self.cwd_dind = f"crawls/crawls{random_str(8)}"
|
|
|
|
|
self.browsertrix_home_host = os.environ.get('BROWSERTRIX_HOME_HOST')
|
|
|
|
|
self.browsertrix_home_container = os.environ.get('BROWSERTRIX_HOME_CONTAINER') or self.browsertrix_home_host
|
|
|
|
|
# create crawls folder if not exists, so it can be safely removed in cleanup
|
|
|
|
|
if self.docker_in_docker:
|
|
|
|
|
os.makedirs(self.cwd_dind, exist_ok=True)
|
|
|
|
|
|
|
|
|
|
def cleanup(self) -> None:
|
|
|
|
|
if self.docker_in_docker:
|
|
|
|
|
logger.debug(f"Removing {self.cwd_dind=}")
|
|
|
|
|
shutil.rmtree(self.cwd_dind, ignore_errors=True)
|
|
|
|
|
|
|
|
|
|
def download(self, item: Metadata) -> Metadata:
|
|
|
|
|
# this new Metadata object is required to avoid duplication
|
|
|
|
|
@@ -51,8 +67,8 @@ class WaczArchiverEnricher(Enricher, Archiver):
|
|
|
|
|
url = to_enrich.get_url()
|
|
|
|
|
|
|
|
|
|
collection = random_str(8)
|
|
|
|
|
browsertrix_home_host = os.environ.get('BROWSERTRIX_HOME_HOST') or os.path.abspath(ArchivingContext.get_tmp_dir())
|
|
|
|
|
browsertrix_home_container = os.environ.get('BROWSERTRIX_HOME_CONTAINER') or browsertrix_home_host
|
|
|
|
|
browsertrix_home_host = self.browsertrix_home_host or os.path.abspath(ArchivingContext.get_tmp_dir())
|
|
|
|
|
browsertrix_home_container = self.browsertrix_home_container or browsertrix_home_host
|
|
|
|
|
|
|
|
|
|
cmd = [
|
|
|
|
|
"crawl",
|
|
|
|
|
@@ -67,11 +83,12 @@ class WaczArchiverEnricher(Enricher, Archiver):
|
|
|
|
|
"--behaviors", "autoscroll,autoplay,autofetch,siteSpecific",
|
|
|
|
|
"--behaviorTimeout", str(self.timeout),
|
|
|
|
|
"--timeout", str(self.timeout)]
|
|
|
|
|
|
|
|
|
|
if self.docker_in_docker:
|
|
|
|
|
cmd.extend(["--cwd", self.cwd_dind])
|
|
|
|
|
|
|
|
|
|
# call docker if explicitly enabled or we are running on the host (not in docker)
|
|
|
|
|
use_docker = os.environ.get('WACZ_ENABLE_DOCKER') or not os.environ.get('RUNNING_IN_DOCKER')
|
|
|
|
|
|
|
|
|
|
if use_docker:
|
|
|
|
|
if self.use_docker:
|
|
|
|
|
logger.debug(f"generating WACZ in Docker for {url=}")
|
|
|
|
|
logger.debug(f"{browsertrix_home_host=} {browsertrix_home_container=}")
|
|
|
|
|
if self.docker_commands:
|
|
|
|
|
@@ -103,7 +120,7 @@ class WaczArchiverEnricher(Enricher, Archiver):
|
|
|
|
|
logger.error(f"WACZ generation failed: {e}")
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
if use_docker:
|
|
|
|
|
if self.use_docker:
|
|
|
|
|
wacz_fn = os.path.join(browsertrix_home_container, "collections", collection, f"{collection}.wacz")
|
|
|
|
|
else:
|
|
|
|
|
wacz_fn = os.path.join("collections", collection, f"{collection}.wacz")
|
|
|
|
|
@@ -116,7 +133,7 @@ class WaczArchiverEnricher(Enricher, Archiver):
|
|
|
|
|
if self.extract_media or self.extract_screenshot:
|
|
|
|
|
self.extract_media_from_wacz(to_enrich, wacz_fn)
|
|
|
|
|
|
|
|
|
|
if use_docker:
|
|
|
|
|
if self.use_docker:
|
|
|
|
|
jsonl_fn = os.path.join(browsertrix_home_container, "collections", collection, "pages", "pages.jsonl")
|
|
|
|
|
else:
|
|
|
|
|
jsonl_fn = os.path.join("collections", collection, "pages", "pages.jsonl")
|
|
|
|
|
|