Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
renata-olivmachado opened this issue Apr 24, 2024 · 1 comment
Open
Assignees
Milestone

Comments

@renata-olivmachado
Copy link

renata-olivmachado commented Apr 24, 2024

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
Copy link

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

@Moscarde Moscarde moved this from Backlog da Sprint de Dev to Em Desenvolvimento in IlimiDados (Dashboards) Apr 25, 2024
@Moscarde Moscarde moved this from Em Desenvolvimento to Validação Senior in IlimiDados (Dashboards) Apr 25, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Archived in project
Development

No branches or pull requests

3 participants