Как определить имя класса или идентификатор в Python Scraping с Beautifulsoup и Selenium - PullRequest
0 голосов
/ 05 декабря 2018

Я создаю код скребка и уже смог прочитать таблицу и информацию, которую я хочу.Проблема связана со ссылкой на следующую страницу, я пытался использовать имя класса, а также тег svg, но код прерывается при изменении значения имени класса.

Вот ссылка на страницу

Страница для очистки

И код элемента css, который запускается кодом для перехода на следующую страницуэто

driver.find_element_by_css_selector('#root > div > div > main > div.ez6st4XksKUGZfGdvIhjV > section > div:nth-child(1) > div._1c5cPqlj4FoguvpKXSY69p > div > span:nth-child(3) > svg').click()

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

Спасибо

Ответы [ 2 ]

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

Как вы можете щелкнуть промежуток, вы также можете использовать

from selenium import webdriver
d  = webdriver.Chrome()
url = 'https://super.walmart.com.mx/despensa/enlatados-y-conservas/chiles-enlatados/_/N-10kldy7?%2Fdespensa%2Fenlatados-y-conservas%2Fchiles-enlatados%2F_%2FN-10kldy7%3F%2Fdespensa%2Fenlatados-y-conservas%2Fchiles-enlatados%2F_%2FN-10kldy7%3F%2Fdespensa%2Fenlatados-y-conservas%2Fchiles-enlatados%2F_%2FN-10kldy7%3FNs=product.displayText%7C0&offSet=0&storeId=0000009999&No=40'
d.get(url)
# example number of clicks below
for i in range(2):
    d.find_element_by_xpath("//*[starts-with(@d,'M0')]/parent::*/parent::span").click()
0 голосов
/ 05 декабря 2018

Вы можете использовать строку ниже, чтобы нажать кнопку «Далее», не ссылаясь на динамические имена классов:

driver.find_element_by_xpath('//span[@value]/following-sibling::span/*[name()="svg"]').click()

То же самое с CSS-селектором:

driver.find_element_by_css_selector('span[value] + span > svg')

Обновление

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

while True:
    try:
        wait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'span[value] + span > svg'))).click()
    except:
        break
...