首页 > 解决方案 > Python selenium 无法提取文本

问题描述

我正在尝试从列表中抓取文本,这是 URL:

https://www.eneba.com/es/lego-dimensions-starter-pack-playstation-4

这是我的代码:

1º 我找到清单 (ul)

ul 中的每个 li 2º 打印文本

ul = driver.find_element_by_xpath('//h2[2]/following-sibling::ul') 

li = ul.find_elements_by_tag_name('li')
#print(li.text)

for element in li:
    print(element.text)

此代码返回空格而不是文本,我做错了什么?

有些人的回答是不检查任何事情就说出来。1º xpath 确实在那里,检查一下 2º 页面的 html 中有 29 个 H2,而不仅仅是一个

我收到了一些人的反对票,他们说 1º 的事情,甚至没有检查任何东西。我要提取的是这段文字:

• Rompecabezas - resolver varios acertijos es una de las mecánicas centrales del juego;• Para todos los públicos – El juego es apropiado para jugadores de todas las edades;• Arcade - los jugadores deben terminar con éxito los niveles que aumentan en dificultad a medida que avanzan en el juego;• Acción - este título incluye desafíos que deben superarse utilizando habilidades como precisión, tiempo de respuesta rápido 等;• 超级英雄——Los jugadores entran en un mundo peligroso, donde los únicos capaces de detener el crimen son los héroesbendecidos con poderes únicos;• Un jugador - el juego presenta una campaña en solitario con una historia;• Multijugador local - esta función permite que varias personas participen en los mismos partidos, ya sea a través de la pantalla dividida o la misma conxión de red。

标签: pythonseleniumselenium-webdriverweb-scrapingxpath

解决方案


1我已经设法从我所在的地区获取数据,但我不得不花一些时间从国家列表中选择西班牙。请注意,我避免使用 xpath 定位器,因为它们太长了。所有解释都在代码的注释中。

2要从元素中获取文本,通常使用 .text,但在这种情况下是行不通的。你get_attribute("innerHTML")真正需要的也是如此。

我离开了我使用的所有等待。您可以自己调试并删除不需要的。

解决方案:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome(executable_path='/snap/bin/chromium.chromedriver')
driver.get('https://www.eneba.com/es/lego-dimensions-starter-pack-playstation-4')

wait = WebDriverWait(driver, 15)
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "._1FArM6>.qGNWom.qGNWom"))).click()  # accept cookies
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".EcNujK._2afX4x._1OhNBA"))).click()  # click region button
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#region .css-1hwfws3"))).click()  # change region

wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#region .react-select__input>input")))
driver.find_element_by_css_selector("#region .react-select__input>input").send_keys("spa")  # input country name
driver.find_element_by_css_selector("#react-select-2-option-5").click()  # select found country
driver.find_element_by_css_selector("._3Fpvn5>button[type='submit']").click()  # submit country
wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "div[itemprop=description]>ul>li")))  # wait for all li elements
cards = driver.find_elements_by_css_selector("div[itemprop=description]>ul>li")
for card in cards:
    print(card.get_attribute("innerHTML"))
driver.close()
driver.quit()

结果:

• Rompecabezas - resolver varios acertijos es una de las mecánicas centrales del juego;
• Para todos los públicos – El juego es apropiado para jugadores de todas las edades;
• Arcade - los jugadores deben terminar con éxito los niveles que aumentan en dificultad a medida que avanzan en el juego;
• Acción - este título incluye desafíos que deben superarse utilizando habilidades como precisión, tiempo de respuesta rápido, etc.;
• Superhéroes - Los jugadores entran en un mundo peligroso, donde los únicos capaces de detener el crimen son los héroes bendecidos con poderes únicos;
• Un jugador - el juego presenta una campaña en solitario con una historia;
• Multijugador local - esta función permite que varias personas participen en los mismos partidos, ya sea a través de la pantalla dividida o la misma conexión de red.

推荐阅读