Селен находит только часть ссылок - PullRequest
1 голос
/ 26 мая 2019

Я пытаюсь получить URL всех продуктов с этой веб-страницы, но мне удалось получить только ее часть.

Моей первой попыткой было очистить страницу с Beautifulsoup, но потом я понял, что селен будет лучше, так как мне нужно было несколько раз нажать кнопку «Показать больше».Я также добавил код для прокрутки вниз страницы, поскольку я думал, что это проблема, но результат не изменился.

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

def getListingLinks(link):
    # Open the driver
    driver = webdriver.Chrome(executable_path="")
    driver.maximize_window()
    driver.get(link)
    time.sleep(3)
    # scroll down: repeated to ensure it reaches the bottom and all items are loaded
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(3)
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(3)

    listing_links = []  

    while True:
        try:
            driver.execute_script("return arguments[0].scrollIntoView(true);", WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="main-content"]/div[2]/div[2]/div[4]/button'))))
            driver.execute_script("arguments[0].click();", WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#main-content > div:nth-child(2) > div.main-column > div.btn-wrapper.center > button"))))
            print("Button clicked")
            links = driver.find_elements_by_class_name('fop-contentWrapper')
            for link in links:
                algo=link.find_element_by_css_selector('.fop-contentWrapper a').get_attribute('href')
                print(algo)
                listing_links.append(str(algo))
        except:
            print("No more Buttons")
            break

    driver.close()
    return listing_links 

fresh_food = getListingLinks("https://www.ocado.com/browse/fresh-20002")

print(len(fresh_food))  ## Output: 228

Как вы можете видеть, я получаю 228 URL, в то время как я хотел бы получить5605 ссылок, то есть фактическое количество товаров на веб-странице в соответствии с Ocado.Я считаю, что у меня есть проблемы с порядком моего кода, но я не могу найти правильный порядок.Буду искренне признателен за любую помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...