Динамический раскрывающийся список не заполняется автоматическими предложениями на 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:
Вывод
Таким образом, можно сделать вывод, что запрос данных определяется как выполняемый экземпляром WebDriver, управляемым Selenium, и ответ блокируется.
Ссылки
Пара документации:
tl; доктор
Пара актуальных дискуссий: