Выпадающий список Dynami c не заполняется автоматическими предложениями на https://www.nseindia.com/, когда значения передаются с использованием Selenium и Python - PullRequest
1 голос
/ 18 июня 2020
driver = webdriver.Chrome('C:/Workspace/Development/chromedriver.exe')
driver.get('https://www.nseindia.com/companies-listing/corporate-filings-actions')
inputbox = driver.find_element_by_xpath('/html/body/div[7]/div[1]/div/section/div/div/div/div/div/div[1]/div[1]/div[1]/div/span/input[2]')
inputbox.send_keys("Reliance")

Я пытаюсь очистить таблицу с этого веб-сайта , которая появится после того, как вы введете название компании в текстовое поле над ней. Прилагаемый блок кода хорошо работает с такими похожими раскрывающимися списками обычного поиска Google и веб-сайта wolfram, но когда я запускаю свой скрипт на требуемом веб-сайте, он просто вводит требуемый текст в текстовое поле - раскрывающийся список показывает 'Записи не найдены ', тогда как в ручном режиме работает хорошо.

1 Ответ

2 голосов
/ 18 июня 2020

Я выполнил ваш тест, добавив несколько настроек, и запустил тест следующим образом:

  • Блок кода:

    from selenium import webdriver        
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
    driver.get('https://www.nseindia.com/companies-listing/corporate-filings-actions')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='Corporate_Actions_equity']//input[@placeholder='Company Name or Symbol']"))).send_keys("Reliance")
    
  • Наблюдение: Подобно вашему наблюдению, я наткнулся на то же препятствие, но без результатов:

nseindia


Deep Dive

Кажется, что click() в элементе с текстом как Get Data действительно происходит. Но при просмотре DOM Tree веб-страницы вы обнаружите, что некоторые из тегов <script> относятся к JavaScripts с ключевым словом akam . В качестве примера:

  • <script type="text/javascript" src="https://www.nseindia.com/akam/11/3b383b75" defer=""></script>
  • <noscript><img src="https://www.nseindia.com/akam/11/pixel_3b383b75?a=dD02ZDMxODU2ODk2YTYwODA4M2JlOTlmOGNkZTY3Njg4ZWRmZjE4YmMwJmpzPW9mZg==" style="visibility: hidden; position: absolute; left: -999px; top: -999px;" /></noscript>

Это явный признак того, что веб-сайт защищен Менеджер ботов расширенная служба обнаружения ботов, предоставляемая Akamai , и ответ получает заблокирован .


Менеджер ботов

По статье Менеджер ботов - Основы :

akamai_detection


Заключение

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


Ссылки

Пара документов:


тл; dr

Пара соответствующих обсуждений:

...