Найти - Пользователи
Полная версия: Помогите: Selenium отправка нажатий на клавишу. (Пайрсинг текста, картинок, работа с базой данных и тд)
Начало » Data Mining » Помогите: Selenium отправка нажатий на клавишу. (Пайрсинг текста, картинок, работа с базой данных и тд)
1 2
nur_erbol_2002
Суть прчины на видео. Легче будет понять по видео

YOUTUBE

Краткий пересказ:
Главная проблема: нужно с имитировать нажатия на кнопки клавиатуры.
второстепенная проблема: создание базы данных

мой код :

 from config import yyour_ligin, yyour_password
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time   
driver = webdriver.Chrome(executable_path="C:\\Users\\Nurmakhanov\\Desktop\\python scripts\\safiety_driving\\chromedriver.exe")
try:
    # open site
    driver.get(url="http://safety-driving.kz/personal/")
    time.sleep(5)
    # send user`s login
    username = driver.find_element(By.NAME,'USER_LOGIN')
    username.clear
    username.send_keys(yyour_ligin)
    time.sleep(0.1)
    # send user`s password
    password = driver.find_element(By.NAME,'USER_PASSWORD')
    password.clear
    password.send_keys(yyour_password)
    time.sleep(0.1)
    # click "login" for login
    login_button = driver.find_element(By.NAME,'Login').click() 
    time.sleep(5)
    # open link with tests
    driver.get(url="http://safety-driving.kz/online2/exam/beta/#pages/tests.php")
    time.sleep(5)
    # start test
    start_test_button = driver.find_element(By.CLASS_NAME, "btn.btn-primary").click()
    time.sleep(5)
    start_test_button = driver.find_element(By.CLASS_NAME, "bkt-start-test-button.btn.btn-primary.center-block").click()
    time.sleep(5)
    # select answer
    next_ans = driver.find_element(By.CLASS_NAME, "bkt-question-answers-container.col-xs-12.col-sm-5.col-lg-5").send_keys(Keys.NUMPAD1)
    time.sleep(2)
    next_ans = driver.find_element(By.CLASS_NAME, "bkt-question-answers-container.col-xs-12.col-sm-5.col-lg-5").send_keys(Keys.NUMPAD2)
    time.sleep(2)
    next_ans = driver.find_element(By.CLASS_NAME, "bkt-question-answers-container.col-xs-12.col-sm-5.col-lg-5").send_keys(Keys.NUMPAD3)
    time.sleep(2)
    ###
    time.sleep(10)
    
except Exception as ex:
    print(ex)
finally:
    driver.close()
    driver.quit()
py.user.next
В Data Mining создаёшь топики, которые не относятся к Data Mining. Data Mining - это получение данных из данных. Например, у тебя есть сто цыплят, ты можешь предположить, что их родили курицы в количестве, которое соответствует среднестатистическому количеству яиц, откладываемых одной курицей. Так ты из количества цыплят можешь выудить количество куриц и, соответственно, размер курятника, в котором они живут. Так у тебя из ста цыплят получается база данных стройматериалов, которых не было изначально вообще. Вот это Data Mining.

А у тебя - это просто парсинг новичковый.

Я думаю (ну, так, на первый взгляд), что ты нажатия клавиш передаёшь не тому элементу. Передаёшь контейнеру, а ловит их не контейнер. Поэтому это нужно всё равно сидеть тебе и разбираться со страницей, с тем, как она устроена, как её писал создатель этой страницы, иметь дело с его мозгами, с тем, что он там задумывал.

А вообще, парсить всё это нужно не Selenium'ом, а именно запросами по HTTP. Потому что браузер, когда ты в нём просматриваешь сайт, никакие нажатия клавиш никуда не посылает, он только автоматизирует запросы по HTTP. Соответственно, нажатие чего-то там преобразуется в какой-то HTTP-запрос или там в какое-нибудь редактирование DOM'а страницы. То есть нажатия видишь только ты и браузер, а сайт нажатий не видит, он видит только HTTP-запросы.

Так что, не знаю, кто тебе будет помогать. Выглядит всё так, что ты не понимаешь, как оно устроено всё, но при этом взял у кого-то какой-то заказ и хочешь, чтобы за тебя его делали бесплатно другие, пока ты там ночью бухаешь или укуриваешься. Заебись! Чотко придумал! Могёшь!
nur_erbol_2002
py.user.next
В Data Mining создаёшь топики, которые не относятся к Data Mining. Data Mining - это получение данных из данных. Например, у тебя есть сто цыплят, ты можешь предположить, что их родили курицы в количестве, которое соответствует среднестатистическому количеству яиц, откладываемых одной курицей. Так ты из количества цыплят можешь выудить количество куриц и, соответственно, размер курятника, в котором они живут. Так у тебя из ста цыплят получается база данных стройматериалов, которых не было изначально вообще. Вот это Data Mining.А у тебя - это просто парсинг новичковый.Я думаю (ну, так, на первый взгляд), что ты нажатия клавиш передаёшь не тому элементу. Передаёшь контейнеру, а ловит их не контейнер. Поэтому это нужно всё равно сидеть тебе и разбираться со страницей, с тем, как она устроена, как её писал создатель этой страницы, иметь дело с его мозгами, с тем, что он там задумывал.А вообще, парсить всё это нужно не Selenium'ом, а именно запросами по HTTP. Потому что браузер, когда ты в нём просматриваешь сайт, никакие нажатия клавиш никуда не посылает, он только автоматизирует запросы по HTTP. Соответственно, нажатие чего-то там преобразуется в какой-то HTTP-запрос или там в какое-нибудь редактирование DOM'а страницы. То есть нажатия видишь только ты и браузер, а сайт нажатий не видит, он видит только HTTP-запросы.Так что, не знаю, кто тебе будет помогать. Выглядит всё так, что ты не понимаешь, как оно устроено всё, но при этом взял у кого-то какой-то заказ и хочешь, чтобы за тебя его делали бесплатно другие, пока ты там ночью бухаешь или укуриваешься. Заебись! Чотко придумал! Могёшь!

Прости, но, судя по тому что ты написал в 1 абзаце и в последнем ты полеваешь говном людей лучше чем объясняешь. 😂

За 2ое и 3и абзац спасибо. Дал куда идти думать…
Но с тем что мне нужно выбрать другой способ а не селениум я не соглашусь, ибо таких же популярных инструментов которые могут работать с js и могут позволить ему прогрузиться я не видел. Там во время начала теста сайт грузиться сразу а тесты дозагружаються. Любой парсер html будет думать что сайт загружен уже и останавливать дозагрузку. Откуда такая инфа? Пробовал уже через requests + bs4
Это мой первый личный не коммерческий проект, я не прошу писать за меня все. Сделав все я собираюсь выложить это в открытый доступ, чтоб люди пользовались(может телеграм бота сделаю), а я показывал это когда буду устраиваться куда то на работу, + в портфолио так сказать. Скажешь, слишком сложно для пет проекта новичка, может быть будешь прав, но иди ты *****, я все равно хочу это сделать
Только советы или пару строк кода где я сделал ошибку.
И совет с базой куда я буду записывать вопросы. Для нескольких тыс строк хватит ли самого пайтона или надо сюда и sql ставить?
py.user.next
nur_erbol_2002
Но с тем что мне нужно выбрать другой способ а не селениум я не соглашусь, ибо таких же популярных инструментов которые могут работать с js и могут позволить ему прогрузиться я не видел.
Он для тестирования сделан изначально, поэтому он стал заложником этого. Как бы он ни развивался, он всё равно теперь не может прыгнуть выше своей головы. Он не может выйти из собственной клетки, которую ему сделал хозяин изначально. Поэтому от него и надо отказываться первым делом. Сегодня он работает, завтра перестанет работать, а поменять ты это не сможешь. Надо будет тебе ждать, когда в нём исправят какой-то баг, а ждать исправления бага обычно приходится год, два года и так далее. Там такие периоды. То есть когда ты в Selenium'е, у тебя нет контроля над ситуацией.

nur_erbol_2002
Там во время начала теста сайт грузиться сразу а тесты дозагружаються. Любой парсер html будет думать что сайт загружен уже и останавливать дозагрузку.
Да ты хотя бы в консоль браузера заглядывал? Какие запросы идут, когда он там грузится, какие JavaScript-скрипты загружаются и что в них. Вот ты натолкнулся на то, что ты не можешь нажимать эти кнопки, вот тебе нужен способ нажатия на них или обход этого нажатия, чтобы его вообще делать не надо было. Это делается через анализ сайта.

nur_erbol_2002
Откуда такая инфа? Пробовал уже через requests + bs4
Так ты же не разбираешься в этом всём. Даже если ты их знаешь, например, надо ещё знать, как их применять и как их не применять. А это ты знаешь? Скальпель можно по-разному применять, он от этого скальпелем не перестаёт быть. Но им можно операцию классную провести, а можно какую-то хуйню сделать. И он тебе никак не скажет “вот ты чо щас печень протыкаешь насквозь мной?! это неправильно!”.

Ты, вообще, знаешь, как прослушиваются кнопки в коде на JavaScript? Это берётся элемент из DOM и к нему прикрепляется прослушивальщик нажатий. А знаешь, что такое DOM? Нет, конечно. И что мне сейчас сидеть тут и пересказывать тебе книжки, которые я читал, а ты не читал? Мне-то это нахера, они все написаны, никто их от тебя не прятал. Соответственно, эти кнопки может слышать любой элементик, который там на странице есть. И вот кто из них слушает кнопки, это надо через JavaScript-скрипты смотреть. Ты посылаешь кнопки одному элементу, а он их не слышит, потому что на нём нет слушальщика и пропагация не идёт тоже. Ну, ты просто тупо делаешь что-то, а оно просто тупо тебе отвечает в ответ “ничего не вижу”. Тупой вопрос- тупой ответ. Для этого вот и надо анализировать, что там и как там оно устроено. Готовиться надо, разведку вести, а потом только делать.

nur_erbol_2002
Это мой первый личный не коммерческий проект, я не прошу писать за меня все.
Ты просишь за тебя обокрасть этот сайт. А это тут не котируется. Кто-то сидел, собирал там это всё, сделал работу, имеет полное право монетизировать это всё. Ты не можешь ему предъявлять претензии, что он тебе бесплатно доступ не даёт туда, потому что он это всё сделал, а ты нет. К нему больше уважения, чем к тебе, какому-то халявщику. Иди на форум взломщиков, там уёбки собираются всякие, глисты, которые ничего не умеют, за счёт других живут. Ну вот, давай, вперёд. Только вот они тебя тоже ценить не будут, а тоже попытаются отыметь либо на деньги, либо на какую-нибудь хуйню ещё там какую-нибудь. Скины у тебя украдут в CS-GO для перепродажи, пока ты там уши развесишь. Ещё и бухаешь, алконафт - вообще находка. Ему что угодно говоришь - он что угодно делать будет.

nur_erbol_2002
И совет с базой куда я буду записывать вопросы. Для нескольких тыс строк хватит ли самого пайтона или надо сюда и sql ставить?
SQL нужен, когда ты умно искать собрался данные. Соответственно, для баз данных с SQL есть разные мощности. Начинается всё с SQLite'а, там вся база лежит в одном файле.Многие программы это используют; например, браузер свои куки хранит у себя в SQLite-файле. Потом там идёт MySQL. Он очень хорошо сделан, но он не выдерживает очень тяжёлые базы с миллиардами записей. Потом уже идёт PostgreSQL, который сделан похуже, чем MySQL, но он зато выдерживает огромные базы. А потом уже начинаются другие системы.

Соответственно, у тебя есть умный поиск данных какой-то? Я что-то его не наблюдаю. Значит, тебе хватит базы данных без SQL. Для таких баз данных возможности шире гораздо. Это и простой текстовый файл с любым своим форматом, и просто какой-нибудь CSV-формат, и просто какой-нибудь JSON-формат, а можешь и XML выбрать, если собрался что-то передавать от одной системы к другой. Так что я не вижу необходимости сужения до SQL при выборе подходящего формата хранения и использования. Бери JSON.

А пока что у тебя базы нет. Ты её не смог собрать. В принципе, ты её собрать-то сможешь, если так глобально посмотреть , так что можешь писать по частям своего бота. Для написания бота можешь использовать базу, наполненную вручную какими-то тестовыми данными. На них ты полностью можешь разработать бота, который полностью функционирует. Для тебя эта задача будет неподъёмной, я так думаю, потому что ты ещё не знаешь, что такое изготовление программ, и слишком легкомысленно к этому относишься пока. А потом, когда у тебя бот готов, ты можешь собрать ему уже реальную базу данных вопросов. И вот тебе понадобится расковырять этот сайт, чтобы получить данные с него.

То есть это две абсолютно разные задачи, а не одна задача, как тебе кажется по неопытности. Первая задача - это спарсить сайт, который не парсится. Вторая задача - сделать бота, который правильно общается и с пользователем одним, и с пользователями многими, и с пользователями многими одновременно, помня про каждого всю его историю. Они обе сложные, так что зря ты губу раскатал, что сейчас типа всё сделаешь сходу, а ещё там кого-то задействуешь для этого, лапшу им на уши навешав. Люди не дураки, они видят тебя насквозь. Только я вот тебе об этом говорю, а другие нахуй тебя будут молча посылать и ты даже не поймёшь ничего.
nur_erbol_2002
py.user.next
Хорошо. Спасибо, хотя там половина говно из твоих слов но все же 2ая половина немного полезна. Я не бухаю, не курую, не знаю откуда инфа такая, да и в игры не играю, понятия не имею о чем ты, обиженка ты какой то. У тебя что сайт кто то спарсил?? Кстати, пасибо, спасибо что подсказал где хранить базу. То что ты говоришь там про монитезацию, хакерство и тд, это называется “Пиратство”. Я собираюсь спиратить чей то платный сайт. Пиратство было и будет. Может для тебя пиратство это “ВАААА!! Ты чмо ебанное - ПИРАТ!!!”, но для меня это норма. Может выложу в телеграм бот, но:
1) хуй знает возможно я это сделаю
2)даже если сделают я не вижу жизни у этого телеграм бота. Чисто для галочки что я дал всему этому интерфейс, хоть и говеный. Я уверен что поддерживать его не буду. Закину на какой то сервер с бесплатным там 10 -20 может часовым периодом, а как закончиться то забью. Может включу для демонстраций на работе как петпроект или перед друзьми повыебываться и тд и все. Болших проблем владельцам сайта не буду достовлять.

На счёт DOM тоже спасибо. Я нашел как посылать клики клавиш сайту. Через прямую эмуляцию клавиатуры, ахах. Есть конечно минус, я не смогу пользоваться компом во время работы скрипта, но ниче, на ночь оставлю, за 8 часов достаточно насобирает. 700-1000 циклов за ночь думаю сделает
Осталось только сортировку и добавление в базу прописать.

А еще на счет селениума. Ты прав я сооовсем еще новичек. Подскажи что есть кроме Selenium для парсинга с js? Я искал инфу в инете, все говорят что подойдет Selenium а не requests. requests работает с html, ну про крайней мере ей сложно скормить js, я способа так и нашел. Как раз таки заложник функционала тут requests. Если говоришь что с selenium я не смогу спарсить то тогда какой инструмент будет лучше? Мне еще не поздно переписать. Хотя да, жалко будет, я писал эти 40 строк кода 3 дня.

py.user.next
nur_erbol_2002
Подскажи что есть кроме Selenium для парсинга с js?
Да есть там одна фигня какая-то, но она ненадёжная. В общем, если тебе понадобилось парсить с обязательным запуском JavaScript-скриптов, то что-то ты делаешь не то. То есть где-то ты что-то не доанализировал по HTTP-запросам.

nur_erbol_2002
Как раз таки заложник функционала тут requests.
К requests вопросов нет. Инструмент эффективный.

nur_erbol_2002
Я нашел как посылать клики клавиш сайту. Через прямую эмуляцию клавиатуры, ахах.
Ты пойми, этот сайт не последний. Везде тебе надо будет делать то же самое, но там не везде будут всякие такие возможности. И вот тогда наступит жопа - будет тупик в каком-то небольшом элементе, из-за которого ты всю программу не сделаешь в итоге. Поэтому и надо правильно учиться сразу, а не пробовать всякую хрень сначала.
nur_erbol_2002
py.user.next
Ооо, в этот раз без осарблений)) Спасибо
на счет HTTP запросов, я посмотрел, ты был прав, но я не разобрался, символы какие то

Youtube

http://safety-driving.kz/online2/exam/beta/#pages/tests.php

py.user.next
Я посмотрел. Это приложение, которое работает в браузере. С сайта эти скрипты только загружаются и всё, и в самом сайте никаких вычислений не просходит. Только в браузере идут вычисления. Я до конца теста не доходил, чтобы проверить точно всё, так как там через каждые пять неверных ответов он перезапускает тест с начала, а я эти ответы не знаю.

nur_erbol_2002
на счет HTTP запросов, я посмотрел, ты был прав, но я не разобрался, символы какие то
Не, это счётчик Яндекса, это левая фигня.

А что по множеству файлов, в которые у тебя сохраняются вопросы из Selenium'а, то тебе надо просто файл открыть до цикла (без with и в режиме w), потом в цикле писать в этот файл через f.write() или через print('text', file=f), а потом после цикла сделать f.close(). Тогда у тебя будет один файл.

Вообще, это тест реально весь прослушать и сохранить все данные. Но это нужно много возиться. То есть это надо скачивать этот JavaScript-код весь (там несколько файлов), потом его исправлять, объединять в единое целое, чтобы он работал отдельно от сайта, и вешать в нём уже прослушки какие-то. Ну, там можно этот JavaScript-код привязать к странице на своём сервере локальном и там всё это слушать. То есть это даже больше с JavaScript-кодом работа, а не с питоном. Сайт тоже там что-то посылает, периодически там следит за временем. То есть ту информацию тоже придётся имитировать, будто этот сайт есть там.

Так что используй Selenium, если хотя бы получается на нём. Но это всё на соплях будет держаться.

Проблему с клавиатурой я не понял. Вроде всё нажимается.
nur_erbol_2002
py.user.next
Да, Спасибо за помощь. Сейчас я уткнулся в проблему с незнанием sql. Пойду учить. Не знаю сколько времени придеться изучать, но я дам знать если у меня все же получиться, как никак твое участите в качестве советника есть в этом проекте. Как построю базу данных, дам знать, думаю уйдет 1 - 2 недели до того как сделаю все.
+ в респект от меня.
p.s. если решился помогать людям не обсирай их, ахах
py.user.next
nur_erbol_2002
p.s. если решился помогать людям не обсирай их, ахах
Так ты если пьяные видео записываешь, ты думаешь, кто-то терпеть это будет тут? Не, здесь не институт благородных девиц. Здесь тебя пошлют на три весёлых буквы. Это тебе ещё повезло, что я эти видео смотрю. Здесь запощивание задания в картинках считается неуважением и постоянно всех дрочат за это, а ты вообще пишешь видео, где надо десять минут сидеть, хуйню эту слушать. Ещё и пьяный! Пьяный вообще не садись за комп. Бухаешь - иди бухай! Не надо тут людей отвлекать. Протрезвеешь - выкладывай всё текстом. Потому что текст всегда можно оцифровать. А код из видео или из картинки никто не будет сидеть и переписывать себе, чтобы проверить, как он там запускается и продебажить его хотя бы, просмотреть переменные на разных этапах выполнения и так далее. Ты здесь нихуя ни тенгешки не заплатил, чтобы сидеть потом здесь и выёбываться. А эти плюсики - хуйня, они просто для фана, чтобы не скучно было. На другом форуме тебя бы сразу вырезали нахуй! в первый же день! так что успокойся.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB