Доброго дня. Сегодня хотел бы показать небольшой пример, как работать с формами на python. В качестве примера буду использовать форму на сайте telecom.kz, хотя это не совсем форма, а просто 2 input элемента. Вот так они выглядят на сайте:
Приведу свой код:
следующим шагом, мы его зачищаем:
Даже такой небольшой пример не обошелся без проблемных моментов, в первую очередь, это то что в input элементе используется автоподстановка символов "+7", если сразу отправлять в input элемент номер телефона, то цифры печатаются в не совсем правильном порядке. Для того, чтобы сразу поставить "+7" я после очистки отправляю в элемент символ " " (пробел).
Следующим каверзным моментом оказалось, то что метод send_keys слишком быстро печатаем номер в поле, стандартного способа замедлить ввод нет, немного поискав нашел способ печатать номер телефона по символу с задержкой 0,3 секунды.
Следующим шагом будем получение суммы задолженности и вывод на экран:
По традиции, использую список прокси серверов, чтобы не быть забаненным за большое количество запросов задолженности.
Что задумал но не получилось, так это вывод надписи "Некорректный номер телефона."
Вот эта строчка должна искать div элемент и выводить текст, но она почему то не работает:
Буду рад если кто-то знает как это исправить.
На этом раскланиваюсь, спасибо за внимание.
Приведу свой код:
from selenium import webdriver # импортирую пакет webdriver
from fake_useragent import UserAgent # импортирую фэйк юзер агента
from time import sleep # sleep, без него никак
from random import choice, uniform
def get_summ(html, proxy, phone):
options = webdriver.ChromeOptions()
options.add_argument('headless')
# options.add_argument('--window-size=1400x1400')
# options.add_argument('--proxy-server=%s' % proxy)
options.add_argument('user-agent=%s' % UserAgent().chrome)
#driver = webdriver.Chrome('C:\\python37\\chromedriver_win32\\chromedriver.exe') # or Firefox() or smth else
driver = webdriver.Chrome(options=options) # определяем объект типа webdriver
# driver.set_window_size(1400, 1024)
driver.get(html) # передаем ему на вход url
inp = driver.find_element_by_xpath("//*[@id='phone']")
inp.clear()
sleep(2)
inp.send_keys(' ')
sleep(1)
for character in phone:
inp.send_keys(character)
sleep(0.3)
#inp.send_keys(phone)
sleep(2)
inc = driver.find_element_by_class_name('invalid-feedback').get_attribute('text')
print(inc)
ans = driver.find_element_by_name('amount').get_attribute('value')
print(ans)
def main():
phone = '7172356396'
proxies = open('proxies.txt').read().split('\n')
proxy = choice(proxies)
get_summ('https://telecom.kz/', proxy, phone)
if __name__ == '__main__':
main()
Итак, по коду, основной метод для поиска input элемента с вводом телефона:
inp = driver.find_element_by_xpath("//*[@id='phone']")
следующим шагом, мы его зачищаем:
inp.clear()
Даже такой небольшой пример не обошелся без проблемных моментов, в первую очередь, это то что в input элементе используется автоподстановка символов "+7", если сразу отправлять в input элемент номер телефона, то цифры печатаются в не совсем правильном порядке. Для того, чтобы сразу поставить "+7" я после очистки отправляю в элемент символ " " (пробел).
Следующим каверзным моментом оказалось, то что метод send_keys слишком быстро печатаем номер в поле, стандартного способа замедлить ввод нет, немного поискав нашел способ печатать номер телефона по символу с задержкой 0,3 секунды.
for character in phone:
inp.send_keys(character)
sleep(0.3)
Следующим шагом будем получение суммы задолженности и вывод на экран:
ans = driver.find_element_by_name('amount').get_attribute('value')
По традиции, использую список прокси серверов, чтобы не быть забаненным за большое количество запросов задолженности.
Что задумал но не получилось, так это вывод надписи "Некорректный номер телефона."
Вот эта строчка должна искать div элемент и выводить текст, но она почему то не работает:
inc = driver.find_element_by_class_name('invalid-feedback').get_attribute('text')
Буду рад если кто-то знает как это исправить.
На этом раскланиваюсь, спасибо за внимание.
Комментариев нет:
Отправить комментарий