Spaces:
Build error
Build error
import time | |
from abc import ABC, abstractmethod | |
from tempfile import mkdtemp | |
from selenium import webdriver | |
from selenium.webdriver.chrome.options import Options | |
from llm_engineering.domain.documents import NoSQLBaseDocument | |
# Check if the current version of chromedriver exists | |
# and if it doesn't exist, download it automatically, | |
# then add chromedriver to path | |
class BaseCrawler(ABC): | |
model: type[NoSQLBaseDocument] | |
def extract(self, link: str, **kwargs) -> None: ... | |
class BaseSeleniumCrawler(BaseCrawler, ABC): | |
def __init__(self, scroll_limit: int = 5) -> None: | |
options = webdriver.ChromeOptions() | |
options.add_argument("--no-sandbox") | |
options.add_argument("--headless=new") | |
options.add_argument("--disable-dev-shm-usage") | |
options.add_argument("--log-level=3") | |
options.add_argument("--disable-popup-blocking") | |
options.add_argument("--disable-notifications") | |
options.add_argument("--disable-extensions") | |
options.add_argument("--disable-background-networking") | |
options.add_argument("--ignore-certificate-errors") | |
options.add_argument(f"--data-path={mkdtemp()}") | |
options.add_argument(f"--disk-cache-dir={mkdtemp()}") | |
options.add_argument("--remote-debugging-port=9226") | |
self.set_extra_driver_options(options) | |
self.scroll_limit = scroll_limit | |
self.driver = webdriver.Chrome( | |
options=options, | |
) | |
def set_extra_driver_options(self, options: Options) -> None: | |
pass | |
def login(self) -> None: | |
pass | |
def scroll_page(self) -> None: | |
"""Scroll through the LinkedIn page based on the scroll limit.""" | |
current_scroll = 0 | |
last_height = self.driver.execute_script("return document.body.scrollHeight") | |
while True: | |
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") | |
time.sleep(5) | |
new_height = self.driver.execute_script("return document.body.scrollHeight") | |
if new_height == last_height or (self.scroll_limit and current_scroll >= self.scroll_limit): | |
break | |
last_height = new_height | |
current_scroll += 1 | |