hansalemaos / a_selenium2df

Get all attributes from each Selenium element in record time
https://pypi.org/project/a-selenium2df/
MIT License
4 stars 2 forks source link

unknown error: backendNodeId is missing in a node #1

Closed neves8232 closed 1 year ago

neves8232 commented 1 year ago

Tenho este codigo:

from time import sleep
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.ui import WebDriverWait
import undetected_chromedriver as uc
from selenium.webdriver.common.by import By
from a_selenium2df import get_df
from urllib import parse
from PrettyColorPrinter import add_printer
from rapidfuzz import fuzz
import gspread
import pandas as pd
from a_pandas_ex_apply_ignore_exceptions import pd_add_apply_ignore_exceptions

pd_add_apply_ignore_exceptions()
add_printer(1)

def getdf(q="*"):
    return get_df(driver,
                  By,
                  WebDriverWait,
                  expected_conditions,
                  queryselector=q,
                  with_methods=True,
                  )

gc = gspread.service_account()
sht1 = gc.open_by_key('1E8OVhEjwDzoeIRIqV-3HeA-E2fTI6XBjHK50zPji04g')
colunas = sht1.sheet1.get_values()[0]
driver = uc.Chrome(headless=True)
driver.get("https://www.olx.pt/carros-motos-e-barcos/carros/")

df = getdf()

Que devolve este output :

could not detect version_main.therefore, we are assuming it is chrome 108 or higher
Message: unknown error: backendNodeId is missing in a node
  (Session info: chrome=SOME IP)
Stacktrace:
Backtrace:
        GetHandleVerifier [0x00B2A813+48355]
        (No symbol) [0x00ABC4B1]
        (No symbol) [0x009C5358]
        (No symbol) [0x009C8E9E]
        (No symbol) [0x009C8C90]
        (No symbol) [0x009C8BAE]
        (No symbol) [0x009C883F]
        (No symbol) [0x009CA19B]
        (No symbol) [0x00A1D279]
        (No symbol) [0x00A0A73C]
        (No symbol) [0x00A1C922]
        (No symbol) [0x00A0A536]
        (No symbol) [0x009E82DC]
        (No symbol) [0x009E93DD]
        GetHandleVerifier [0x00D8AABD+2539405]
        GetHandleVerifier [0x00DCA78F+2800735]
        GetHandleVerifier [0x00DC456C+2775612]
        GetHandleVerifier [0x00BB51E0+616112]
        (No symbol) [0x00AC5F8C]
        (No symbol) [0x00AC2328]
        (No symbol) [0x00AC240B]
        (No symbol) [0x00AB4FF7]
        BaseThreadInitThunk [0x76807D59+25]
        RtlInitializeExceptionChain [0x772DB79B+107]
        RtlClearBits [0x772DB71F+191]
hansalemaos commented 1 year ago

A função está retornando o DataFrame?

neves8232 commented 1 year ago

Erro meu ! Ao esperar a dataframe é de facto gerada !

hansalemaos commented 1 year ago

Esses erros vão aparecer toda hora. É pela natureza do código. Ele obtém todos os elementos de vez (por isso é muito rápido). Se um elemento dinâmico desaparecer na hora de parsing, vai ter esse erro. No entanto, não precisa se preocupa, esses erros são ignorados.

neves8232 commented 1 year ago

Sim entretanto percebi, obrigado !

Mas agora deparo-me com outro "problema" e uma duvida.

O "problema" é sempre que faço uma operação do genero : df[df['aa_classList'].astype(str).str.contains("item-info-container", na=False, regex=False)]

Vai-me devolver a minha pesquisa e logo abaixo o df (ficando então o df com os filtros que pedi em cima e o df normal em baixo, tendo que dar sempre scroll para conseguir ir ver o que quero), seja qual for a operação. Mas só acontece no python console do PyCharm, se executar pelo cmd com o parametro -i, ja não acontece.

Contudo ao usar no cmd, como tem o word wrap ativo a DF fica toda desformatada (já procurei como remover o word wrap do cmd no windows 11 e nao encontrei).

Tem ideia o que pode pycharm ter ativo para causar este problema ?

Para além desse "problema" tenho a tal questão, eu ao inves de fazer isto :

df = getdf("div")
df[df['aa_classList'].astype(str).str.contains("item-info-container", na=False, regex=False)]

Poderia fazer algo do genero : df = getdf('class="item-info-container "')

Obrigado pelo apoio, deveria criar um canal de discord o seu conteudo é incrivel !

hansalemaos commented 1 year ago

Obrigado pelo comentário! Pode criar um novo varíavel: df2 = df[df['aa_classList'].astype(str).str.contains("item-info-container", na=False, regex=False)] Se você quiser tirar o PrettyColorPrinter: pd.color_printer_reset() Se quiser imprimir tudo: df.ds_color_print_all()

Referente a sua dúvida:

df = getdf('class="item-info-container "')

A função getdf aceita qualquer querySelector válido em JavaScript: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector?retiredLocale=de

neves8232 commented 1 year ago

Ao criar uma nova variavel ele da print ao df2 e depois ao df por algum motivo, sendo que eu apenas estou a a criar o df = getdf("div") na consola python. Possivelmente será um problema das minhas configurações de PyCharm, tenho que pesquisar mais sobre o assunto .

Tentei fazer df = getdf('class="item-info-container "')

Mas devolveu selenium.common.exceptions.InvalidElementStateException: Message: invalid element state: Failed to execute 'querySelectorAll' on 'Document': 'class="item-info-container "' is not a valid selector.

hansalemaos commented 1 year ago

Aqui já tem o problema: 'class="item-info-container "' is not a valid selector O que você escreveu não é valido em JS. Aqui tem um bom tutorial: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector?retiredLocale=de

neves8232 commented 1 year ago

Obrigado ajudou bastante ! Já agora estas mensagens


        GetHandleVerifier [0x00B2A813+48355]
        (No symbol) [0x00ABC4B1]
        (No symbol) [0x009C5358]
        (No symbol) [0x009C8E9E]
        (No symbol) [0x009C8C90]
        (No symbol) [0x009C8BAE]
        (No symbol) [0x009C883F]
        (No symbol) [0x009CA19B]
        (No symbol) [0x00A1D279]
        (No symbol) [0x00A0A73C]
        (No symbol) [0x00A1C922]
        (No symbol) [0x00A0A536]
        (No symbol) [0x009E82DC]
        (No symbol) [0x009E93DD]
        GetHandleVerifier [0x00D8AABD+2539405]
        GetHandleVerifier [0x00DCA78F+2800735]
        GetHandleVerifier [0x00DC456C+2775612]
        GetHandleVerifier [0x00BB51E0+616112]
        (No symbol) [0x00AC5F8C]
        (No symbol) [0x00AC2328]
        (No symbol) [0x00AC240B]
        (No symbol) [0x00AB4FF7]
        BaseThreadInitThunk [0x76807D59+25]
        RtlInitializeExceptionChain [0x772DB79B+107]
        RtlClearBits [0x772DB71F+191]

Dão para remover ?

hansalemaos commented 1 year ago

Não tem como, se você esperar um pouco depois de carregar o site, provavelmente, vai aparecer menos. São elementos dinâmicos que desaparecem na hora do parsing, por isso, tem Exception - mas todos são ignorados. Se você quiser esconder os output, pode fazer algo assim: https://www.youtube.com/watch?v=oBpw2ymDL14