Проблема с селеном: новые поисковые запросы продолжают отбирать элемент из старого поиска. - PullRequest
0 голосов
/ 09 мая 2020

Я запускаю al oop, который выполняет поиск и захватывает элемент. Кажется, что элемент на каждой странице поиска имеет один и тот же селектор CSS. Однако он всегда печатает элемент, связанный с одним поиском, поиском, с которого я впервые начал тестировать скрипт. Не уверены, что это проблема с селектором CSS? Или, возможно, проблема с поваром ie?

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.expected_conditions import presence_of_element_located

EXE_PATH = r'C:\\geckodriver.exe'

tickers = ["bitcoin", "ethereum", "litecoin"]

for t in tickers:

    with webdriver.Firefox(executable_path = EXE_PATH) as driver:
        wait = WebDriverWait(driver, 10)
        driver.get("https://coingecko.com/en")
        driver.find_element_by_css_selector(".px-2").send_keys(t + Keys.RETURN)
        first_result = wait.until(presence_of_element_located((By.CSS_SELECTOR, "div.text-3xl > span:nth-child(1)")))
        price = first_result.get_attribute("innerHTML")
        print(price)

1 Ответ

0 голосов
/ 09 мая 2020

Я нашел root причину этой проблемы, мой друг. Дело в том, что когда вы отправляете тикер в поле поиска, требуется некоторое время для загрузки параметров, поскольку поле поиска представляет собой автоматическое раскрывающееся меню. Но в соответствии с вашим скриптом, как только вы отправляете тикер в поле поиска, вы нажимаете кнопку ввода, и в фоновом режиме происходит выбор bitcoin, потому что, если вы увидите в тренде bitcoin имеет ранг 1, и из-за отсутствия задержки между отправкой тикера и нажатием клавиши ввода по умолчанию выбирается bitcoin. Я изменил сценарий, вы можете просмотреть его ниже. Если вы не хотите использовать спящий режим, добавьте веб-драйвер, подождите и подождите, пока желаемый вариант не отобразится в раскрывающемся списке поля поиска. Надеюсь, это поможет вам. Пожалуйста, отметьте его как принятый, если вас устраивает мой ответ.

tickers = ["bitcoin", "ethereum", "litecoin"]

для t в тикерах:

with webdriver.Chrome(executable_path = EXE_PATH) as driver:
    wait = WebDriverWait(driver, 10)
    driver.get("https://coingecko.com/en")
    driver.find_element_by_css_selector(".px-2").send_keys(t)
    time.sleep(5)
    driver.find_element_by_css_selector(".px-2").send_keys(Keys.RETURN);
    first_result = wait.until(presence_of_element_located((By.CSS_SELECTOR, "div.text-3xl > span:nth-child(1)")))
    price = first_result.get_attribute("innerHTML")
    print(pric
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...