Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 12.07.2020
Сообщений: 18

Selenium, не работает Keys

14.07.2020, 21:17. Показов 4526. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
import time
 
 
 
def main():
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get("https://site.ru/")
    btn_elem1 = driver.find_element_by_xpath("/html/body/div[2]/div[3]/div[2]/div[1]/div/ul/li[2]")
    btn_elem1.click()
    btn_elem2 = driver.find_element_by_xpath("/html/body/div[2]/div[3]/div[2]/div[1]/div/div[2]/div/p[1]/label/input")
    btn_elem2.click()
    btn_elem2.send_keys("login")
    btn_elem3 = driver.find_element_by_xpath("/html/body/div[2]/div[3]/div[2]/div[1]/div/div[2]/div/p[2]/label/input")
    btn_elem3.click()
    btn_elem3.send_keys("pass")
    btn_elem4 = driver.find_element_by_xpath("/html/body/div[2]/div[3]/div[2]/div[1]/div/div[2]/div/a")
    btn_elem4.click()
    time.sleep(1)
    driver.get("https://site/1")
    btn_elem5 = driver.find_element_by_xpath("/html/body/div[1]/div[3]/div[1]/fieldset/div[2]/img[1]")
    btn_elem5.click()
 
    action = ActionChains(driver)
    action.key_down(Keys.CONTROL).send_keys("f").key_up(Keys.CONTROL).perform()
    time.sleep(5)
 
if __name__ == "__main__":
    main()
Всё работает до определенного момента.
Браузер открывается, расширяется. Перехожу на нужный сайт. Перехожу на вкладу Войти, ввожу логин и пароль. Перехожу на другую страницу, на которую нет доступа, если не залогинен. Открываю там спойлер со спрятанным текстом.

После чего я хочу вызвать "Найти" через Ctrl+F, но почему то не работает, не происходит ничего. И вообще так понимаю сами клавиши не работают. Как будто не добавились, хотя вроде в начале кода прописано.

И если нужный текст находится, то сделать скриншот и перейти на https://site/2, если нет, то сразу перейти на site/2 и провести там поиск. Всего там порядка десятка тысяч страниц, вероятно адрес станицы надо как-то через переменную сделать? И что-то вроде через ++ как в PHP сделать, типо плюс один, чтобы прибавлялось каждый раз?

Или быть может как-то по другому можно это сделать? Поиск обычного текста по всей странице. И если есть, то скриншот и переход дальше, если нет, то сразу переход дальше. (Звёздочка вызывает скриншот)
Python
1
2
3
4
5
6
7
sila = driver.find_element_by_xpath("/html")
if 'Селява' in sila.text:
   action.send_keys("*")
   action.key_down(Keys.CONTROL).send_keys("s").key_up(Keys.CONTROL).perform()
   driver.get("https://site/+1id") (вот как это сделать?)
else:
   driver.get("https://site/+1id") (вот как это сделать?)
Проблемы две осталось в общем-то. Это как найти текст и как заставить перейти на страницу следующего id.
Буду очень благодарен за любую помощь.

Добавлено через 3 часа 54 минуты
Помогли, я вроде в лучшую сторону изменил код, но по прежнему что-то не работает, но не могу понять что именно

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from selenium import webdriver
import time
 
for i in range(1, 12699):
    automation_func(f"https://site.ru/lookup/{i}")
 
def automation_func(url):
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get("https://site.ru/")
    btn_elem1 = driver.find_element_by_xpath("/html/body/div[2]/div[3]/div[2]/div[1]/div/ul/li[2]")
    btn_elem1.click()
    btn_elem2 = driver.find_element_by_xpath("/html/body/div[2]/div[3]/div[2]/div[1]/div/div[2]/div/p[1]/label/input")
    btn_elem2.click()
    btn_elem2.send_keys("login")
    btn_elem3 = driver.find_element_by_xpath("/html/body/div[2]/div[3]/div[2]/div[1]/div/div[2]/div/p[2]/label/input")
    btn_elem3.click()
    btn_elem3.send_keys("pass")
    btn_elem4 = driver.find_element_by_xpath("/html/body/div[2]/div[3]/div[2]/div[1]/div/div[2]/div/a")
    btn_elem4.click()
    time.sleep(1)
    driver.get("url")
    btn_elem5 = driver.find_element_by_xpath("/html/body/div[1]/div[3]/div[1]/fieldset/div[2]/img[1]")
    btn_elem5.click()
 
if "small" in driver.page_source:
    screenshot = driver.save_screenshot("{i}.png")
    driver.get("url")
else:
    driver.get("url")
 
if __name__ == "__main__":
    main()
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.07.2020, 21:17
Ответы с готовыми решениями:

selenium.common.exceptions.NoSuchElementException и selenium.common.exceptions.ElementNotInteractableException
Хочу создать бота для авто-ставки на сайте(luckyduck.app), делаю проверку на существование блока...

Добавить пару keys в dictionary
Пропарсил строку в которой есть 3 слова: "a", "b", "c". Записал их в переменную text через цикл....

Конструкция типа "if word not in keys:"
Условие: если слово не встречается в фильтре(keys), то его нужно писать с Заглавной буквы....

4
Заклинатель змей
 Аватар для DobroAlex
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,605
14.07.2020, 22:31
TaliZorah, зачем вообще искать что то через Ctrl F, если можно искать по xpath и id?
0
0 / 0 / 0
Регистрация: 12.07.2020
Сообщений: 18
14.07.2020, 23:34  [ТС]
DobroAlex, потому как первый вариант я знал и знал как сделать ввод клавиш (всяко я думал), а во втором не был уверен в корректности синтаксиса

Добавлено через 59 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
import time
def automation_func(url, i):
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get("site.ru")
    btn_elem1 = driver.find_element_by_xpath("/html/body/div[2]/div[3]/div[2]/div[1]/div/ul/li[2]")
    btn_elem1.click()
    btn_elem2 = driver.find_element_by_xpath("/html/body/div[2]/div[3]/div[2]/div[1]/div/div[2]/div/p[1]/label/input")
    btn_elem2.click()
    btn_elem2.send_keys("login")
    btn_elem3 = driver.find_element_by_xpath("/html/body/div[2]/div[3]/div[2]/div[1]/div/div[2]/div/p[2]/label/input")
    btn_elem3.click()
    btn_elem3.send_keys("pass")
    btn_elem4 = driver.find_element_by_xpath("/html/body/div[2]/div[3]/div[2]/div[1]/div/div[2]/div/a")
    btn_elem4.click()
    time.sleep(1)
    driver.get("url")
    btn_elem5 = driver.find_element_by_xpath("/html/body/div[1]/div[3]/div[1]/fieldset/div[2]/img[1]")
    btn_elem5.click()
    time.sleep(5)
    if "small" in driver.page_source:
        screenshot = driver.save_screenshot("{i}.png")
def main():
    for i in range(1, 5):
        automation_func(f"https://site.ru/{i}", i)
if __name__ == "__main__":
    main()
почему-то встаёт на строчке, кто знает в чем проблема? driver.get(“url”)
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
15.07.2020, 12:12
Цитата Сообщение от TaliZorah Посмотреть сообщение
После чего я хочу вызвать "Найти" через Ctrl+F
тебе еще много стоит почитать и изучить. Селениум работает с тем что "внутри" окна браузера, вызывать функции самого браузера он не может, да и если бы ты вывел окно поиска браузера то как бы туда ввел? это же не веб страница
А кейс прекрасно работают


Локаторы твои просто смерть, прочти вот тут какие надо http://testerslittlehelper.wor... eal-xpath/

Цитата Сообщение от TaliZorah Посмотреть сообщение
driver.get("url")
потому что нет такого адреса "урл", надо без кавычек указать, это же переменнаня!

Тебе не только по селениуму надо почитать, но и по питону бы неплохо!
0
0 / 0 / 0
Регистрация: 12.07.2020
Сообщений: 18
15.07.2020, 14:45  [ТС]
Welemir1, спасибо, ну я за пару суток в захлёб смотрел на ютуб ролики, как про селениум, так и питон, но конечно уже в голове полная каша, плюс форумы, разные сайты, что как пишется, что как делается.
Без опыта само собой подобного рода ошибки глупые могут быть)


Ну я да, уже понял еще вчера эту свою ошибку и пытался уже и через if поиск текста и через try, проблема раньше выходит, что вот не переходит по сайту по неизвестной причине.

Убираю кавычки и по идее должно заработать? Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.07.2020, 14:45
Помогаю со студенческими работами здесь

AttributeError: 'str' object has no attribute 'keys'
здраствуйте, пишу голосового помощника и столкнулся с ошибкой (козалось-бы простой, но сам...

Не работает selenium
Пытаюсь запустить программу, написанную при помощи selenium и выдает такое: Traceback (most...

Почему Selenium не работает в Python 3.71?
Добрый вечер. Подскажите по вопросу: установил Python 3.71 на Windows 7.- успешно установил...

Selenium странно работает find_elements_by_xpath
Приветствую! Ситуация следующая: есть вот такой код search_res =...

Selenium не работает страница под chromedriver
Пишу небольшой скрипт по парсингу нескольких сайтов Использую либу селениум. В основном браузере...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru