javascript - 如何使用SeleniumWebdriver和Python通过滚动找到网页上的所有元素

标签 javascript python-3.x selenium lazy-loading webdriverwait

我似乎无法获取网页上的所有元素。无论我尝试使用 Selenium 做什么。我确定我错过了什么。这是我的代码。该 url 至少有 30 个元素,但每当我只抓取 6 个元素返回时。我错过了什么?

import requests
import webbrowser
import time
from bs4 import BeautifulSoup as bs
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException



headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'}
url = 'https://www.adidas.com/us/men-shoes-new_arrivals'

res = requests.get(url, headers = headers)
page_soup = bs(res.text, "html.parser")


containers = page_soup.findAll("div", {"class": "gl-product-card-container show-variation-carousel"})


print(len(containers))
#for each container find shoe model
shoe_colors = []

for container in containers:
    if container.find("div", {'class': 'gl-product-card__reviews-number'}) is not None:
        shoe_model = container.div.div.img["title"]
        review = container.find('div', {'class':'gl-product-card__reviews-number'})
        review = int(review.text)



driver = webdriver.Chrome()
driver.get(url)
time.sleep(5)
shoe_prices = driver.find_elements_by_css_selector('.gl-price')

for price in shoe_prices:
    print(price.text)
print(len(shoe_prices))

最佳答案

你必须慢慢向下滚动页面。它仅在查看产品时使用 ajax 请求价格数据。

options = Options()
options.add_argument('--start-maximized')
driver = webdriver.Chrome(options=options)

url = 'https://www.adidas.com/us/men-shoes-new_arrivals'
driver.get(url)

scroll_times = len(driver.find_elements_by_class_name('col-s-6')) / 4 # (divide by 4 column product per row)
scrolled = 0
scroll_size = 400

while scrolled < scroll_times:
    driver.execute_script('window.scrollTo(0, arguments[0]);', scroll_size)
    scrolled +=1
    scroll_size += 400
    time.sleep(1)

shoe_prices = driver.find_elements_by_class_name('gl-price')

for price in shoe_prices:
    print(price.text)

print(len(shoe_prices))

关于javascript - 如何使用SeleniumWebdriver和Python通过滚动找到网页上的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53680597/

相关文章:

java - 使用 selenium 删除/更改特定元素类属性值

javascript - 在屏幕中心启动 Facebook 共享弹出窗口

javascript - AJAX 调用返回的 jQuery 和 $ 未在 like.js.erb 中定义

python - 是否可以在 Celery 中为每个队列分别设置 "worker_prefetch_multiplier"?

python - 如何计算元组列表的累加和

javascript - 上传文件 - Protractor

javascript - 适用于 2 页的书签

javascript - 单击按钮时将其从行中删除

python - 是否可以使用 python 在 Dialogflow 中触发意图?

java - 如何使用 selenium webdriver 在 div 标签中找到 P 标签