Не уверен, как получить элементы из динамически загружаемой веб-страницы с помощью селена - PullRequest
0 голосов
/ 10 апреля 2020

Так что я перебираю отзывы и тип кожи от Sephora и столкнулся с проблемой, определяющей, как убрать элементы со страницы. Sephora.com загружает отзывы динамически после того, как вы прокрутите страницу вниз, поэтому я переключился с красивого супа на Selenium, чтобы получить отзывы.

У отзывов нет ни идентификатора, ни имени, ни идентификатора CSS, который кажется быть стабильным Кажется, что Xpath не распознается каждый раз, когда я пытаюсь использовать его, копируя из chrome или из firefox.

Вот пример HTML из проверенного элемента, который я загрузил в chrome: Просмотр элемента на нужной странице

Мои попытки на данный момент:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome("/Users/myName/Downloads/chromedriver")
url = 'https://www.sephora.com/product/the-porefessional-face-primer-P264900'
driver.get(url)
reviews = driver.find_elements_by_xpath(
    "//div[@id='ratings-reviews']//div[@data-comp='Ellipsis Box ']")

print("REVIEWS:", reviews)

Вывод:

| => /Users/myName/anaconda3/bin/python "/Users/myName/Documents/ScrapeyFile Group/attempt32.py"
REVIEWS: []
(base) 

Итак в основном пустой список.

ПОПЫТКА 2:

import time

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException

from selenium.webdriver.common.keys import Keys

# Open up a Firefox browser and navigate to web page.
driver = webdriver.Firefox()
driver.get(
    "https://www.sephora.com/product/squalane-antioxidant-cleansing-oil-P416560?skuId=2051902&om_mmc=ppc-GG_1165716902_56760225087_pla-420378096665_2051902_257731959107_9061275_c&country_switch=us&lang=en&ds_rl=1261471&gclid=EAIaIQobChMIisW0iLbK6AIVaR6tBh005wUTEAYYBCABEgJVdvD_BwE&gclsrc=aw.ds"
)

#Scroll to bottom of page b/c its dynamically loading
html = driver.find_element_by_tag_name('html')
html.send_keys(Keys.END)

#scrape stats and comments
comments = driver.find_elements_by_css_selector("div.css-7rv8g1")

print("!!!!!!Comments!!!!!")
print(comments)

ВЫХОД:

| => /Users/MYNAME/anaconda3/bin/python /Users/MYNAME/Downloads/attempt33.py
!!!!!!Comments!!!!!
[]
(base)

Опять пусто. : (

Я получаю те же результаты, когда пытаюсь использовать разные селекторы элементов:

#scrape stats and comments
comments = driver.find_elements_by_class_name("css-7rv8g1")

Я также ничего не получаю при попытке:

comments = driver.find_elements_by_xpath(
    "//div[@data-comp='GridCell Box']//div[@data-comp='Ellipsis Box ']")

и Это (обратите внимание, пробел после Ellipsis Box пропал:

comments = driver.find_elements_by_xpath(
    "//div[@data-comp='GridCell Box']//div[@data-comp='Ellipsis Box']")

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

1 Ответ

0 голосов
/ 10 апреля 2020
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
import time
from selenium import webdriver
driver = webdriver.Chrome(executable_path=r"")
driver.maximize_window()
wait = WebDriverWait(driver, 20)
driver.get("https://www.sephora.fr/p/black-ink---classic-line-felt-liner---eyeliner-feutre-precis-waterproof-P3622017.html")
scrolls = 1
while True:
            scrolls -= 1
            driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
            time.sleep(3)
            if scrolls < 0:
                break

reviewText=wait.until(EC.presence_of_all_elements_located((By.XPATH, "//ol[@class='bv-content-list bv-content-list-reviews']//li//div[@class='bv-content-summary-body']//div[1]")))
for textreview in reviewText:
      print textreview.text

Выход:

enter image description here

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