selon Impossible de tirer des données de PantaIP.com J'ai essayé de tirer des données de Paneip.com, y compris tous les commentaires et la réponse de chaque commentaire.
J'ai un problème d'obtenir un texte de réponse chaque commentaire. J'utilise selenium pour cliquer sur un bouton afin d'obtenir le texte à l'intérieur. Cependant, cela ne fonctionne que si je fais défiler la page à l'emplacement du bouton. P>
Voici une erreur si je ne fais pas défiler si je ne fais pas défiler. P>
import requests import re from bs4 import BeautifulSoup from selenium import webdriver chrome_path = r"C:\Users\user\Downloads\chromedriver_win32\chromedriver.exe" url='https://pantip.com/topic/38372443' driver = webdriver.Chrome(chrome_path) driver.get(url) content=driver.page_source soup=BeautifulSoup(content,'lxml') #Click all buttons for div in soup.find_all("div", id = lambda value: value and value.startswith("reply-comment-")): xPath = '''//*[@id="''' + str(div['id']) + '''"]/a''' button = driver.find_element_by_xpath(xPath).click() # Get all comments text = list() for div in soup.find_all("div", id = lambda value: value and value.startswith("comment-")): if len(str(div.text).strip()) > 1: text.append(str(div.text).strip()) driver.quit()
3 Réponses :
sélénium peut exécuter un script avec exécuteur_script ("xxxx") code>, E.g:
Il existe un panneau de navigation fixe au bas de la page .. Lorsque vous essayez de cliquer sur le bouton, vous cliquez sur l'élément de ce panneau et c'est pourquoi une exception levée ... Vous pourriez avoir besoin
Cliquez sur le bouton pour voir la réponse p>
Merci. Cela fonctionne, mais pourquoi nous devons "faire défiler un peu bas".
@ T.WANDEEWANDEE, c'est parce que lorsque nous faisons ScrollINToView () code> Le lien requis n'est toujours pas cliquable car il est couvert par un panneau inférieur fixe. Donc, une plus en plus de la touche est nécessaire pour le rendre complètement visible / cliquable
Pour cliquer sur le bouton commentaire em> et extraire le texte de réponse de chaque commentaire dont vous n'avez pas besoin belle soupe em> et selenium em> seul suffit . Pour atteindre que vous devez défilement em> l'élément souhaité dans le Viewport A> Et vous pouvez utiliser la solution suivante: bloc de code: p>
Sortie de la console: P>
Merci. Ça marche. Pourriez-vous m'expliquer plus comment commentant_buttons = webDriverwait (pilote, 20) .. .. .. œuvres.
@ T.WANDEEWANDEE Cette ligne de code commentaires_buttons = webDriverwait (pilote, 20). JUNTIL (EC.VISIBILY_OFLATION_ALLATION_LOCATION (((A.Reply.see-More span.focus-txt "))))))))))))))))))))))))) Code> recueille les éléments identifiés comme Commentaire B> Bouton et stocke dans une liste afin que nous puissions appeler
clic () code> méthode sur une itération.
Comme selon vos détails de l'exception, vous pouvez utiliser une classe d'action pour cliquer sur WebElement, vous pouvez aller Stackoverflow.com/a/50960720/9405154 < / a>