Всем привет.
Подскажите, можно ли как то иначе переписать кусок кода с поиском текста на странице?
Я только изучаю питон и не все ньюансы знаю. Буду благодарен за помощь.
bb = u'АБВГДЕЖЗИКЛМНОПРСТУФХЦЧШЩЭЮЯ'
buk1 = random.choice(bb)
buk2 = random.choice(bb)
prob = ' '
num = random.randint(000000, 999999)
passp = '' + buk1 + buk2 + ' ' + `num`
PageText = driver.find_element_by_tag_name("body").text
isSuccsses = PageText.find(passp)
while isSuccsses == -1:
#-----------заполнить поля с номером телефона----------
driver.get("https://172.18.200.83/frsdealergate/chooseAction.do")
mss = driver.execute_script("var result = prompt('Input the telephone number'); return result")
srch = driver.find_element_by_id("simsimPhone")
srch.clear()
srch.click()
srch.send_keys(mss)
srch = driver.find_element_by_name("simsimPhoneConfirm")
srch.clear()
srch.click()
srch.send_keys(mss)
#----------клик по линку Дальше
srch = driver.find_element_by_link_text("Дальше")
srch.click()
PageText = driver.find_element_by_tag_name("body").text
isSuccsses = PageText.find(passp)
print("Good")
Вкратце о содержимом кода:
грузится страница с формой заполнения поля номера телефона и его подтверждения
нажимается линк “Дальше” и проверяется наличие текста из passp на следующей странице, если его нет то цикл по новой заполнять номер телефона
Все как бы работает, но есть подозрения, что метод PageText.find слишком долго перебирает весь текст страницы и из-за этого выскакивает предупреждение, что некий скрипт на странице причина медленной работы браузера и предлагает его остановить. И пока не отменишь это предупреждение робот висит.
Как можно по другому описать данную проверку наличия текста на странице ?
Походу грабит весь видимый текст на сторону теста (клиента), поэтому и долго, много данных передается и процесс граба тоже трудоемкий по всем веткам видимый текст повыкусывать…
Используй поиск по XPath.
дело в том, что этот номер постоянно меняется
можно ли как то в это выражение
[contains(text(), "ВЗ 441666")]
вместо номера всунуть переменную из которой оно будет считывать какой текст искать?
я так уже пробовал, но в силу еще не полного освоения синтаксиса не мог правильно составить данную конструкцию …
PageText = driver.find_element_by_xpath('//td[@class = "content"][contains(text(), "{}")]'.format(passp))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
Номер паспорта известен всегда, потому, что он заполняется в поле на предыдущей странице.
Но все равно как оказалось это решение все равно для меня не совсем подходит т.к. это ломает цикл while, он не выполняется если на странице нет элемента как в моем случае passp или в Вашем 'Паспортні дані’