Прокрутите с помощью клавиш. PAGE_DOWN в Selenium Python - PullRequest
0 голосов
/ 10 декабря 2018

Привет Каждый может помочь мне в прокрутке https://www.grainger.com/category/black-pipe-fittings/pipe-fittings/pipe-tubing-and-fittings/plumbing/ecatalog/N-qu1?searchRedirect=products

Я хочу прокрутить это, используя

actions = ActionChains(browser)
actions.send_keys(Keys.PAGE_DOWN)
actions.perform()

, пока не достигнет нижней части свитка, где он найдетЭлемент «Загрузить еще»

loadMoreButton = browser.find_element_by_css_selector(
                        ".btn.list-view__load-more.list-view__load-more--js")
loadMoreButton.click()

, а затем нажмите кнопку «Загрузить больше», чтобы снова выполнить действие прокрутки, а затем снова действие «Загрузка больше», пока кнопка «Загрузить еще» не будет доступна.

Я должен использовать это действие вниз страницы, так как элемент не загружается до тех пор, пока страница не будет прокручена, пока элемент, если кто-то может предложить какое-то решение, будет очень полезен

Ответы [ 3 ]

0 голосов
/ 10 декабря 2018

Чтобы прокрутить страницу https://www.grainger.com/category/black-pipe-fittings/pipe-fittings/pipe-tubing-and-fittings/plumbing/ecatalog/N-qu1?searchRedirect=products до тех пор, пока она не достигнет нижней части страницы, где будет найден элемент с текстом Показать больше , а затем нажимать на элемент, пока элемент не станет доступен, вы можете использоватьследующее решение:

  • Кодовый блок:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.common.exceptions import StaleElementReferenceException
    from selenium.common.exceptions import TimeoutException
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_argument('disable-infobars')
    browser=webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    browser.get("https://www.grainger.com/category/black-pipe-fittings/pipe-fittings/pipe-tubing-and-fittings/plumbing/ecatalog/N-qu1?searchRedirect=products")
    while True:
        try:
            browser.execute_script("return arguments[0].scrollIntoView(true);", WebDriverWait(browser,10).until(EC.visibility_of_element_located((By.XPATH, "//a[@class='btn list-view__load-more list-view__load-more--js' and normalize-space()='View More']"))))
            browser.execute_script("arguments[0].click();", WebDriverWait(browser,10).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='btn list-view__load-more list-view__load-more--js' and normalize-space()='View More']"))))
            print("View More button clicked")
        except (TimeoutException, StaleElementReferenceException) as e:
            print("No more View More buttons")
            break
    browser.quit()
    
  • Консольный вывод:

    View More button clicked
    View More button clicked
    No more View More buttons
    
0 голосов
/ 10 июля 2019

Это сработало для меня без проблем ...

from selenium.webdriver.common.keys import Keys

driver.find_element_by_tag_name('body').send_keys(Keys.PAGE_DOWN)
0 голосов
/ 10 декабря 2018

@ PedroLobito Я пытаюсь удалить ссылки на продукты. Можете ли вы помочь мне в этом


В этом случае не нужно selenium, просто sniff the xhr запрашивает через developer tools и идет прямо к gold (json).


Структура url для продуктов выглядит следующим образом:

https://www.x.com/product/anything-Item#

Просто добавьте значение Item # в объекте json в конце URL, что-то вроде:

  1. https://www.x.com/product/anything-5P540
  2. https://www.x.com/product/anything-5P541

...


py3 пример (для py2, просто измените синтаксис format):

import json
import requests

main_cat = "WP7115916"
sub_cat = "4836"

x = requests.get(f"https://www.x.com/product/tableview/GRAINGER-APPROVED-Square-Head-Plugs-{main_cat}/_/N-qu1?searchRedirect=products&breadcrumbCatId={sub_cat}&s_pp=false").json()

for p in x['records']:
    for childs in p['children']:
        for item in json.loads(childs['collapseValues']):
            url = f"https://www.x.com/product/lol-{item['sku']}"
            print(url)

https://www.x.com/product/lol-5P540
https://www.x.com/product/lol-5P541
https://www.x.com/product/lol-5P542
https://www.x.com/product/lol-5P543
https://www.x.com/product/lol-5P544
https://www.x.com/product/lol-5P545
https://www.x.com/product/lol-5P546
https://www.x.com/product/lol-5P547
https://www.x.com/product/lol-5P548
...
...