Selenium web scraping - Como identificar ID ou caminhos dinâmicos?

219 views
Skip to first unread message

Guilherme Senne

unread,
Feb 12, 2021, 12:56:46 PM2/12/21
to Python Brasil
Contexto

Sou bem novato em Python, estou iniciando um projeto para acessar e extrair dados de clientes de uma base de dados, aprendi algumas técnicas como realizar login no sistema pelo navegador (Chrome), acessar as abas... porém

Problema

Esbarrei no seguinte problema, eu estive usando o Xpath e ID para CLICAR nos links do site, só que descobri que o link que uso para filtrar os clientes altera sempre que o site é atualizado, tanto o Xpath como o ID, quais outros métodos posso utilizar para locarlizar esse campo sem que seja afetado pelo ID dinâmico.

Silvio Lima

unread,
Feb 12, 2021, 1:08:26 PM2/12/21
to python...@googlegroups.com
Scrap

Não é algo simples, pelo menos para mim, mas eu consegui extrair uma lista de id de uma pagina de anuncios. Havia uma lista de 36 id, pois eram 36 anuncios.
Primeiro com BeautiulSoup (bs) vc extrai html da pagina:

scrap = requests.get(driver.current_url)
soup = bs(scrap.content, 'html.parser')

Esse driver é do selenium que leu uma url.
Depois passo o objeto scrap pro bs que interpreta o html

Dai posso extrair de cada pagina a lista de id.
Essa lista será inserida vai append numa lista ids.


ids=[ ]
temp = soup.find_all('div', attrs={'id': True})           
for div in temp:
     ID = div.get('id')
     if ID is not None:
         ids.append(ID)

print(ids)

Vc terá uma lista de ids

Se vc tem apenas um id na pagina, tente usar soup.find.

Boa sorte

Silvio


--
--
------------------------------------
Grupo Python-Brasil
https://wiki.python.org.br/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/python-brasil/d0070fd2-e631-4720-94ca-cd2d4c4cdc64o%40googlegroups.com.

Matheus Rodrigues

unread,
Feb 12, 2021, 2:59:51 PM2/12/21
to python...@googlegroups.com
Boa tarde, tu poderia usar as tags se for um input ou no seu caso links da pra usar pegar pelo nome da classe usando o class_name ou se tu quiser conhecer melhor, porque paginas web dinâmicas com JS são chatinhas, da pra tu usar o execute_script('comando em JS aqui'), um tempo atras tive problema pra efetuar um clique num menu dinâmico resolvi simplesmente clicando em cima do icone usando execute_script claro que exige um conhecimento básico de JS. Obivamente tu tá usando o selenium ou estou errado?? 

ex : self.w.execute('document.getElementsByClassName("sidebar-mini-hide")[6].click()')

ou da pra usar o ActionChains também pra movimentar o  mouse e clicar em cima do links segue exemplo abaixo

sem função uso direto
self.actionsChains = webdriver.ActionChains(self.w)
self.actionsChains.move_to_element(self.menuEsquerda).click().perform()

com função

def acoes(self, elemento, browser):
self.actionsChains = webdriver.ActionChains(browser)
self.actionsChains.move_to_element(elemento).click()
self.actionsChains.perform()

Sinval Júnior

unread,
Feb 18, 2021, 9:38:11 AM2/18/21
to python...@googlegroups.com
Use o label do elemento.


Ao encaminhar esta mensagem, por favor:
1 - Apague meu endereço eletrônico;
2 - Encaminhe como Cópia Oculta (Cco ou BCc) aos seus destinatários. Dificulte assim a disseminação de vírus, spams e banners.

#=================================================================+
#!/usr/bin/env python
nome = 'Sinval Júnior'
email = 'sinvalju arroba gmail ponto com'
print nome
print email
#==================================================================+


--
Reply all
Reply to author
Forward
0 new messages