0
votes

Impossible de cliquer sur les boutons en utilisant selenium

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.

Entrez la description de l'image ici p>

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()


1 commentaires

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>


3 Réponses :


0
votes

sélénium peut exécuter un script avec exécuteur_script ("xxxx") , E.g: xxx


0 commentaires

1
votes

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

  • Faites défiler jusqu'au bouton requis
  • Faites défiler un peu
  • Cliquez sur le bouton pour voir la réponse XXX


2 commentaires

Merci. Cela fonctionne, mais pourquoi nous devons "faire défiler un peu bas".


@ T.WANDEEWANDEE, c'est parce que lorsque nous faisons ScrollINToView () 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