我正在尝试从this亚马逊页面获取元素,这是该产品的平均评论率。它位于这里:
在检查控制台中,该部分显示如下:
<span data-hook="rating-out-of-text" class="a-size-medium a-color-base">4.4 out of 5</span>
我的代码是:
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--incognito')
driver = webdriver.Chrome(chromepath, chrome_options=chrome_options)
driver.maximize_window()
driver.get('https://www.amazon.com/dp/B07B2STSLV')
driver.find_element_by_class_name("a-size-medium a-color-base")
所需的输出是:
4.4 out of 5
但它返回en错误:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".a-size-medium a-color-base"}
(Session info: headless chrome=85.0.4183.121)
因此,显然这种方法无效。我还尝试了使用CSS选择器的几种方法:
driver.find_elements_by_css_selector("span.a-size-base a-nowrap")
并通过xpath获取元素:
driver.find_element_by_xpath('//*[@id="reviewsMedley"]')
但是两者都不起作用
是否有任何想法?
答案 0 :(得分:3)
您在find_element_by_class_name
中使用了2个类,即a-size-medium
和a-color-base
的class_name选择器不支持复合类。那就是为什么它不起作用
此driver.find_elements_by_css_selector("span.a-size-base a-nowrap")
也不起作用,因为两个类a-size-base
和a-nowrap
属于同一标签,即<span>
简而言之,您必须使用代表类的点.
组合同一标签中的所有类。
css路径看起来像-
driver.find_element_by_css_selector("span.a-size-base.a-nowrap").text
您可以按如下所示在xpath中使用复合类
driver.find_element_by_xpath("//span[@class='a-size-base a-nowrap']").text
您遇到的情况是需要元素,因此请使用find_element
而不是find_elements
。
答案 1 :(得分:3)
您也可以尝试以下方法:
driver.find_element_by_xpath(“//span[@class=‘a-size-medium a-color-base’]”)
答案 2 :(得分:1)
这是操作方法。首先,我们单击标签以将其打开,抓取,然后打印出元素。使用等待页面加载,然后将其打印为.text。
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#acrPopover > span.a-declarative > a"))).click()
elem=WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "div.a-icon-row.a-spacing-small.a-padding-none > span")))
print(elem.text)
输出
4.4 out of 5
导入
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC