Динамический раскрывающийся список не заполняется автоматическими предложениями на https://www.nseindia.com/, когда значения передаются с использованием Selenium и Python

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 ответ

Решение

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

  • Блок кода:

    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")
    
  • Наблюдение: как и ваше наблюдение, я наткнулся на то же препятствие, но без результатов:


Глубокое погружение

Кажется click()на элементе с текстом, как это происходит при получении данных. Но при осмотре в DOM дерево в веб - страницы вы увидите, что некоторые из<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>

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


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

Согласно статье Bot Manager - Foundations:

akamai_detection


Вывод

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


Ссылки

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


tl; доктор

Пара актуальных дискуссий:

Другие вопросы по тегам