Не удалось получить «href» на других страницах

#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, я получу точные элементы.