Нажатие на кнопку «Получить данные» для ежемесячной статистики расчетов на nseindia.com не приводит к получению результатов с использованием Selenium и Python - PullRequest
1 голос
/ 23 января 2020

Я пытаюсь почистить данные здесь .

Нажав на рынок капитала и 2019-20 год. Я хочу нажать на Получить данные.

Я использовал следующий код:

driver = webdriver.Chrome(executable_path=chrome_path,options=chrome_options)

driver.get( nse_cash_keystats_page )


 driver.find_element_by_xpath( "//select[@id='h_filetype']/option[text()='Capital Market ']" ).click()

driver.find_element_by_xpath( "//select[@id='yearField']/option[text()='2019-2020']" ).click()

     downloadButton=WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,'//input[@type="image"][@src="/common/images/btn-get-data.gif"]')))

driver.execute_script("arguments[0].click();", downloadButton)

Используя указанный выше код, я могу нажать кнопку Получить данные. Но это не показывает вывод.

Пожалуйста, помогите мне. Спасибо заранее.

1 Ответ

1 голос
/ 23 января 2020

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

  • Блок кода:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    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:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get('https://www1.nseindia.com/products/content/equities/equities/eq_monthly_statistics.htm')
    Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"select#h_filetype")))).select_by_visible_text("Capital Market ")
    Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"select#yearField")))).select_by_visible_text("2019-2020")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.getdata-button#get[type='image'][src^='/common/images/btn-get-data.gif']"))).click()
    

Наблюдение

Как и ваши наблюдения, я столкнулся с тем же блокпостом без каких-либо результатов:

nseindia_Monthly_Statement


Deep Погружение

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

  • <script type="text/javascript" src="https://www1.nseindia.com/akam/11/52349752" defer=""></script>
  • <noscript><img src="https://www1.nseindia.com/akam/11/pixel_52349752?a=dD01ZDZiMTA5OGQ0MDljYTYxN2RjMjc3MzBlN2YwMDQ0NjlkZDNiNTMzJmpzPW9mZg==" style="visibility: hidden; position: absolute; left: -999px; top: -999px;" /></noscript>

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


Bot Manager

Согласно статье Bot Manager - Основы :

akamai_detection


Заключение

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


Ссылки

Несколько документов:


tl; dr

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

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