Нажатие кнопки ползунка в Селен Python - PullRequest
0 голосов
/ 11 февраля 2019

Моя проблема заключается в следующем:

Я тренируюсь, чтобы получить информацию на этом сайте https://www.cetelem.es/.

Я хочу сделать несколько вещей:

  • Нажмите на две ползунковые кнопки, чтобы изменить информацию.

  • Получите информацию после изменения ползунковых кнопок

  • Поместитеусловие, получить информацию только при изменении олова и тай.

Я попытался с помощью следующего кода в Google Colab:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--start-maximized')
webdriver = webdriver.Chrome('chromedriver',chrome_options=chrome_options)
url = "https://www.cetelem.es/"

webdriver.get(url)
webdriver.find_element_by_class_name("bar-slider importe").send_keys("20.000")
webdriver.find_element_by_class_name("bar-slider messes").send_keys("30")
webdriver.save_screenshot('sreenshot.png')
print(webdriver.find_element_by_tag_name('body').text)

ошибка 1

Если у вас есть решение, можете ли вы объяснить мою ошибку?Потому что я настоящий новичок в соскобе.

1 Ответ

0 голосов
/ 12 февраля 2019

Возможно, это не идеально, но вы можете использовать кнопки +/- для регулировки ползунка, пока цель не достигнет цели.Это пример для верхнего слайдера.Вы также должны ограничить границы цели до нижнего уровня 4.000 € и верхнего до 60.000 €.

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
chrome_options = webdriver.ChromeOptions()
# chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--start-maximized')
webdriver = webdriver.Chrome('chromedriver',chrome_options=chrome_options)
url = "https://www.cetelem.es/"

webdriver.get(url)
targetSliderStep = 22.700
targetSliderStep = round(targetSliderStep  * 2) / 2  # to ensure is units covered by clicking
print('target: ' + "{0:.3f}".format(targetSliderStep))
actualSliderStep = float(webdriver.find_element_by_id('slider-step-value').text.replace(' €',''))

if actualSliderStep < targetSliderStep:
    while float(webdriver.find_element_by_id('slider-step-value').text.replace(' €','')) < targetSliderStep:
        webdriver.find_element_by_css_selector("#slider-step .up-button").click()
elif actualSliderStep > targetSliderStep:
    while float(webdriver.find_element_by_id('slider-step-value').text.replace(' €','')) > targetSliderStep:
        webdriver.find_element_by_css_selector("#slider-step .down-button").click()
print('actual: ' + webdriver.find_element_by_id('slider-step-value').text.replace(' €',''))

Чтобы ответить на другие вопросы:

Другой слайдер:

Использовать ту же логику для другого слайдера (и, возможно, добавить в пределах 12-96):

targetTimeStep = 22.700
targetTimeStep = round(int(targetTimeStep))  # to ensure is units covered by clicking
print('target: ' + str(targetTimeStep))
actualTimeStep = int(webdriver.find_element_by_id('slider-time-step-value').text)

if actualTimeStep < targetTimeStep:
    while int(webdriver.find_element_by_id('slider-time-step-value').text) < targetTimeStep:
        webdriver.find_element_by_css_selector("#slider-time-step .up-button").click()
elif actualTimeStep > targetTimeStep:
    while int(webdriver.find_element_by_id('slider-time-step-value').text) > targetTimeStep:
        webdriver.find_element_by_css_selector("#slider-time-step .down-button").click()
print('actual: ' + webdriver.find_element_by_id('slider-time-step-value').text)

Выбрать проекты:

Вы можете получить весь более длинный список проектов, щелкнув левой боковой панели меню и затем нацелив ссылки на проекты с помощью подстрок значения атрибута href.

webdriver.find_element_by_id('showLeft').click()
webdriver.find_element_by_id('layout_6').click()
projects = webdriver.find_elements_by_css_selector("[href*='prestamos/prestamo-']")
print(len(projects))

CSS-селекторы:

Я использую CSS-селекторы, так как современные браузеры оптимизированы для CSS.

Следующее, например,

#slider-step .up-button 

Является родительским элементом с идентификатором (#) slider-step в комбинации потомков с элементом / элементами с классом (.)up-button.# - это селектор идентификатора , селектор класса . a , а " " - комбинатор-потомок , т. Е. Выбираются дети с этим классом, которыеиметь родителя с этим идентификатором.

Вы хотите использовать селекторы идентификаторов, где это возможно, а затем селекторы классов в качестве более быстрых селекторов.

Если щелкнуть правой кнопкой мыши элемент inspect, например, на кнопке +,для верхнего ползунка вы увидите следующий HTML-код:

enter image description here

Вы можете четко видеть родительский идентификатор и дочерний класс для +.

Если вы хотите попрактиковаться в селекторах css, следующая ссылка - это весело, и вы можете прочитать о селекторах здесь

...