无法使用 Selenium 获取元素

Unable to get an element using Selenium

提问人:hanna 提问时间:8/14/2023 最后编辑:undetected Seleniumhanna 更新时间:8/14/2023 访问量:94

问:

我无法从网站获得评级编号 https://www.hoka.com/en/us/mens-everyday-running-shoes/rincon-3/1119395.html 使用硒。

这是我所拥有的 Python 代码:

    from selenium import webdriver
    from selenium.webdriver.common.by import By

    url = "https://www.hoka.com/en/us/mens-everyday-running-shoes/rincon-3/1119395.html"
    driver = webdriver.Chrome()
    driver.get(url)
    res = driver.find_elements(By.TAG_NAME, 'h3')
    for i in res:
        print(i.text)

我得到的是空的结果。

这是我想提取的信息行:

Here's the line with the info I want to extract

selenium-webdriver 网页抓取 xpath css-selectors webdriverwait

评论


答:

1赞 Yaroslavm 8/14/2023 #1

最好使用唯一定位器来匹配特定元素。

如果方法不能正常工作,可以通过textget_attribute('innerText')

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

#previous code

wait = WebDriverWait(driver, 10)
rating = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.pr-review-snapshot-snippets h3')))

print(rating.get_attribute('innerText'))
-1赞 undetected Selenium 8/14/2023 #2

理想情况下,要打印文本 4.4,您需要为 presence_of_element_located() 引入 WebDriverWait,并且可以使用以下任一定位器策略

  • 使用CSS_SELECTOR文本属性:

    driver.get(url='https://www.hoka.com/en/us/mens-everyday-running-shoes/rincon-3/1119395.html')
    print(WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.CSS_SELECTOR, "h3.pr-review-snapshot-snippets-headline"))).text)
    
  • 使用 XPATH 和 :get_attribute()

    driver.get(url='https://www.hoka.com/en/us/mens-everyday-running-shoes/rincon-3/1119395.html')
    print(WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "//h3[starts-with(@class, 'pr-review-snapshot-snippets-headline')]"))).get_attribute("innerHTML"))
    
  • 控制台输出:

    4.4
    
  • 注意:您必须添加以下导入:

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

您可以在如何使用 Selenium 检索 WebElement 的文本 - Python 中找到相关讨论