#html #selenium
Вопрос:
Я не мог получить другие «href» на других страницах,но я все еще мог получить «href» на первой странице. Что в этом плохого? Могу ли я получить общую «href» на всех страницах, если я изменю Xpath ?
!pip install selenium
from selenium import webdriver
import time
import pandas as pd
browser = webdriver.Chrome(executable_path='./chromedriver.exe')
browser.implicitly_wait(5)
# https://tw.mall.yahoo.com/store/屈臣氏Watsons:watsons (original page)
url = "https://tw.mall.yahoo.com/search/product?p=屈臣氏amp;pg=2"
browser.get(url)
# 商品連結
# 如何取得正確的Xpath ?
linkPath = "//section[contains(@class,'MainListing__StoreBoothWrap')]/div/div/div/ul/li/a"
product_links = browser.find_elements_by_xpath(linkPath)
print(len(product_links))
for link in product_links:
print(link.get_attribute("href"))
Комментарии:
1. Каков ожидаемый результат? Какие ссылки вы пытаетесь извлечь.
2. Мой ожидаемый результат-ссылки на продукты(src-0 — src-59) на всех страницах. Я пробую первую страницу(url которой = tw.mall. yahoo.com/store/… работает. Однако, когда я пытаюсь получить ссылки на другие продукты на других страницах, я ничего не получаю.
3. Итак, я просто думаю, что не так с URL ( другими страницами ) или Xpath ? Должен ли я изменить URL-адрес или Xpath ?
Ответ №1:
Вы можете использовать приведенные ниже локаторы для извлечения ссылки на продукт.
Xpath:
//ul[@class='gridList']/li/a
CSS — селектор:
ul.gridList > li > a
Код:
# Imports Required
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver,30)
for i in range(1,5): # Iterate from page 1 to 4
driver.get("https://tw.mall.yahoo.com/search/product?p=屈臣氏amp;pg={}".format(i))
# Wait Until the product appear
wait.until(EC.presence_of_element_located((By.XPATH,"//ul[@class='gridList']")))
# Get the products
product_links = driver.find_elements(By.XPATH,"//ul[@class='gridList']/li/a")
# Iterate over 'product_links' to get all the 'href' values
for j,link in zip(range(len(product_links)),product_links):
print(f"{j} : {link.get_attribute('href')}")
Комментарии:
1. Я понял ! Огромное спасибо. Я вижу, что если я использую правильный Xpath, я получу точные элементы.