Удаление веб-страниц с помощью селена - PullRequest
0 голосов
/ 09 июля 2020

Я думаю, это похоже на эту проблему: Кнопка не нажимается в Selenium Chrome окно

Мне нужно искать информацию о списке журналов автоматически c. Я пробую селен, но он не может нажать кнопку, чтобы выполнить поиск. Может быть, это какая-то защита от веб-сайта?

Пока мой скрипт:

import time
import string
import itertools
from selenium import webdriver

chromedriver_location = "/home/dell/Downloads/chromedriver"

driver = webdriver.Chrome(chromedriver_location)
driver.get('https://www.idealista.com/valoraciones-inmuebles')

time.sleep(2)

test = '7559431DG0075N0001EY'
initial_button = '//*[@id="vendorlead"]/div[2]/a'
search_field = '//*[@id="search-by-reference"]'
valoration = '//*[@id="vendorlead"]/button'
driver.find_element_by_xpath(initial_button).click()
driver.find_element_by_xpath(search_field).send_keys(test)
driver.find_element_by_xpath(valoration).click()

Когда я нажимаю кнопку вручную или через скрипт в Selenium Chrome, он показывает ошибки ниже на консоли : введите описание изображения здесь

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 10 июля 2020

Вас заблокировали. (выполняя третий ответ, поскольку другие очень подходят для подхода к отладке для автоматизации)

Запустите свои тесты и дайте ему не нажать эту последнюю кнопку, но не закрывайте chrome. В этом экземпляре chromedriver выберите вариант языка в правом верхнем углу и выберите Engli sh.

Вы будете go через МНОГО КАПЧИ «я-не-робот». Завершите их все, пока не попадете на сайт Engli sh. (Вы не сможете автоматизировать их - они предназначены для остановки автоматизации.)

Закройте chrome драйвер.

Перезапустите ваш скрипт как есть.

...

У меня вышеперечисленное сработало. В первый раз, когда я запустил приведенное ниже, оно не удалось с той же ошибкой. Я сделал то же самое, запустил тот же код без изменений, и он сработал.

import time
import string
import itertools
import selenium
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.idealista.com/valoraciones-inmuebles')

test = '7559431DG0075N0001EY'

#Objects
initial_button = '//*[@id="vendorlead"]/div[2]/a'
#search_field = '//*[@id="search-by-reference"]'
search_field ='//*[@id="vendorlead"]//input'
valoration = '//*[@id="vendorlead"]/button'

#Actions
time.sleep(5)
driver.find_element_by_xpath(initial_button).click()
time.sleep(5)
driver.find_element_by_xpath(search_field).send_keys(test)
time.sleep(5)
driver.find_element_by_xpath(valoration).click()
time.sleep(5)

... Только, пожалуйста, не используйте это time.sleeps в реальном скрипте. Мне просто нужно было исключить проблемы с синхронизацией.

python 3,8, chrome 83

0 голосов
/ 10 июля 2020

Как упоминалось в комментариях к другому моему ответу, я попробовал ваш код и получил тот же результат. Я также пробовал c#, так что это не привязки селена.

Я пробовал и несколько вещей вручную, и похоже, что основная проблема заключается в том, что sendkeys не устанавливал данные для формы.

Мне не удалось найти объект, который у вас был, поэтому я просто использовал инструменты разработчика, чтобы найти новый, и это сработало.

Если вы измените:

search_field = '//*[@id="search-by-reference"]'

на:

search_field ='//*[@id="vendorlead"]//input'

Это сработало для меня в c#.

Я знаю, что вы делаете python, но это то, что я сделал в c#, чтобы заставить его работать:

   [Test]
        public void stackoverflow()
        {

            var driver = new ChromeDriver();
            driver.Url = "https://www.idealista.com/valoraciones-inmuebles";
            driver.Manage().Window.Maximize();

            var test = "7559431DG0075N0001EY";
            string initial_button = "//*[@id='vendorlead']/div[2]/a";
            string search_field = "//*[@id='vendorlead']//input";
            string valoration = "//*[@id='vendorlead']/button";
            driver.FindElement(By.XPath(initial_button)).Click();
            driver.FindElement(By.XPath(search_field)).SendKeys(test);
           driver.FindElement(By.XPath(valoration)).Click();


        }
0 голосов
/ 09 июля 2020

Вам нужна какая-то c синхронизация между ключами отправки и поиском по щелчку?

Я быстро просмотрел сайт, и когда я вручную ввожу тестовые данные, сайт запускает несколько скриптов. Если вы попытаетесь нажать кнопку поиска без данных, ничего не произойдет.

Попробуйте установить time.sleep между клавишами отправки и щелчком в качестве быстрой проверки. Если это сработает, используйте веб-драйвер, дождитесь динамической синхронизации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...