SouJunior / dashboard-midias

Projeto Dashboard de Mídias
2 stars 1 forks source link

[Desenvolvimento do webscraping - LinkedIn] Logar no LinkedIn #17

Open renata-olivmachado opened 7 months ago

renata-olivmachado commented 7 months ago

Tarefa da Story: #16

Desenvolver webscraping Python, podendo usar selenium ou outra lib. O webscraping deve logar no LinkedIn, acessar a página do SJ e extrair os dados para o AWS S3.

Moscarde commented 7 months ago

Arquivo da classe ScraperLinkedin no repositório Trechos de código referente ao objetivo da task:

    def login(self) -> bool:
        """
        Realiza o login no LinkedIn e certifica que o chat está fechado para evitar conflitos.

        Returns:
            bool: Retorna True se o login foi realizado com sucesso.
        """

        self.driver.get(self.URL_LOGIN)
        self.get_element(xpath=self.XPATH_LOGIN, force_waiting=True).send_keys(
            self.email
        )
        self.get_element(xpath=self.XPATH_PASSWORD).send_keys(self.password)
        self.get_element(xpath=self.XPATH_SUBMIT).click()
        self.close_chat_if_open()
        return True
def close_chat_if_open(self) -> bool:
        """
        Fecha o chat se estiver aberto.

        Returns:
            bool: Retorna True se o chat foi fechado com sucesso e False caso contrário.
        """
        if not self.get_element(xpath=self.XPATH_CHAT_MINIMIZED):
            print("Chat detectado, fechando para evitar conflitos")
            self.get_element(xpath=self.XPATH_CHAT_HEADER).click()
            return True
def get_element(
        self,
        xpath: str,
        origin_element: WebElement = None,
        multiple: bool = False,
        force_waiting: bool = False,
        timeout: int = 10,
    ) -> Union[bool, WebElement, List[WebElement]]:
        """
        Obtém um elemento da pagina.

        Args:
            xpath (str): xpath do elemento.
            origin_element (WebElement, optional): elemento de origem. Padrão None.
            force_waiting (bool, optional): aguarda o elemento estar visível. Padrão False.
            multiple (bool, optional): retorna uma lista. Padrão False.

        Returns:
            Union[bool, WebElement, List[WebElement]]: Elemento ou lista de elementos da página se encontrados ou False.
        """
        origin_element = origin_element or self.driver

        try:
            if force_waiting and not multiple:
                wait = WebDriverWait(origin_element, timeout)
                return wait.until(EC.element_to_be_clickable((By.XPATH, xpath)))

            elif multiple:
                return origin_element.find_elements(By.XPATH, xpath)

            else:
                return origin_element.find_element(By.XPATH, xpath)

        except Exception as e:
            return False