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

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

14.07.2020, 21:17. Показов 4483. Ответов 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
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru