2 votes

Le script de Selenium n'imprime pas la valeur XPath

J'ai fait ce Selenium script comme une pratique pour scrapper des pages lourdes en JS.

Les programmes, démarrer un WebDriver entre un site web, puis appuyer sur un bouton pour qu'ils s'affichent tous, puis je veux juste tirer quelques données, les noms des clubs, mais il y a un problème.

Il imprime juste [], quelqu'un peut-il me dire ce que je fais de mal ici ?

Et mon but est d'obtenir les noms des clubs comme Acadiana Kennel Club, Inc.

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

option = webdriver.ChromeOptions()
option.add_argument(" - incognito")

browser = webdriver.Chrome('/home/djurovic/Desktop/Linux ChromeDriver/chromedriver', chrome_options=option)
browser.get('https://webapps.akc.org/club-search/?fbclid=IwAR1X9TkSI49bHgH3w4VmgrMS05sxLbbazaMO17Q1rEfVq7Pj4Ze66B4hdLM#/agility')

timeout = 20

buttonXpath = '//a[@class="button"]'
namesXpath = '//*[@class="ng-binding"]/text()'

try:
    buttonElement = WebDriverWait(browser, timeout).until(lambda browser: browser.find_element_by_xpath(buttonXpath))
    buttonElement.click()
    clubNames = WebDriverWait(browser, timeout).until(lambda browser: browser.find_elements_by_xpath(namesXpath))
    print(clubNames)
except TimeoutException:
    print('Timed out waiting for page to load')
    browser.quit()

2voto

Andersson Points 31774

'//*[@class="ng-binding"]/text()' La syntaxe XPath n'est pas prise en charge par Selenium car XPath ne peut renvoyer que des WebElements.

Essayez ci-dessous

buttonXpath = '//a[@class="button" and @name="Search"]'
namesXpath = '//a/strong[@class="ng-binding"]'

try:
    buttonElement = WebDriverWait(browser, timeout).until(lambda browser: browser.find_element_by_xpath(buttonXpath))
    buttonElement.click()
    clubNames = [club.text for club in WebDriverWait(browser, timeout).until(lambda browser: browser.find_elements_by_xpath(namesXpath))]
    for clubName in clubNames: 
        print(clubName)
except TimeoutException:
    print('Timed out waiting for page to load')
    browser.quit()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X