Невозможно получить HTML, чтобы соответствовать странице проверки, даже используя селен - Python 3 - PullRequest
0 голосов
/ 21 апреля 2020

Я довольно новичок в программировании в целом, поэтому я просто пытаюсь написать забавную программу для веб-скрапинга. Мой друг и я играем в Animal Crossing и пытаемся играть в репу. Есть веб-страница, где люди перечисляют цены на репу на своих островах. Я хотел бы написать код, который очищает страницу, определяет, сколько звонков продают все, а затем уведомляет меня по тексту или электронной почте, если кто-то перечисляет более 500 звонков.

Я застрял на шаге 1 здесь.

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

Вот HTML, который я пытаюсь определить:

<\div data-v-dee358f6="" class="flex flex-row items-center justify-self-center">
    <\img data-v-dee358f6="" src="/img/turnip.0cf2478d.png" class="w-6 object-scale-down">
    <\p data-v-dee358f6="" class="ml-2">73 Bells<\p>
<\div>

Я хотел бы очистить что-нибудь из класса ml-2, чтобы я мог получить код, содержащий часть список колоколов Я использовал следующий базовый код c, чтобы попробовать различные методы для этого:

#Turnip notifier
#Reads the island page on the turnip exchange and sends a text message when an island goes above 500 bells

from selenium.webdriver import Firefox

webdriver = 'C:\\path'

driver = Firefox(webdriver)

#Open up turnip.exchange URL

url = "https://turnip.exchange/islands"

driver.get(url)

element = driver.find_element_by_class_name('ml-2')

HTML = element.get_attribute('outerHTML')

print(HTML)

Это возвращает HTML, но другого класса. Затем я попытался CSS selector, xPATH, et c ... et c ... каждый из которых заявил, что не было элемента.

Затем я попытался вытащить HTML всей страницы, просто чтобы посмотреть, с чем я работаю, поэтому мой код теперь выглядит так:

#Turnip notifier
#Reads the island page on the turnip exchange and sends a text message when an island goes above 500 bells

from selenium.webdriver import Firefox

webdriver = 'C:\\path'

driver = Firefox(webdriver)

#Open up turnip.exchange URL

url = "https://turnip.exchange/islands"

driver.get(url)

HTML = driver.execute_script("return document.documentElement.outerHTML;")

print(HTML)

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

Есть идеи? После того, как я смогу получить код, который содержит количество звонков, я почти уверен, что у меня есть представление о том, куда go оттуда с точки зрения создания списка / словаря и хранения значений, но я не могу найти колокола в настоящее время.

1 Ответ

1 голос
/ 21 апреля 2020

Если вы хотите получить список всех списков звонков, вы можете получить это по следующей ссылке:

bells_list = WebDriverWait(driver, 30).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".note p.ml-2")))

for bells in bells_list:
    print(bells.text)

Добавьте это сразу после строки driver.get (url). Для этого потребуется подождать, пока элементы не будут готовы к поиску, и получить информацию.

Вам необходимо будет добавить следующие операции импорта:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...