Open renata-olivmachado opened 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
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.