Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在nseindia.com上点击获取月度结算统计数据按钮不';t使用Selenium和Python获取结果_Python_Selenium_Google Chrome_Selenium Webdriver_Selenium Chromedriver - Fatal编程技术网

在nseindia.com上点击获取月度结算统计数据按钮不';t使用Selenium和Python获取结果

在nseindia.com上点击获取月度结算统计数据按钮不';t使用Selenium和Python获取结果,python,selenium,google-chrome,selenium-webdriver,selenium-chromedriver,Python,Selenium,Google Chrome,Selenium Webdriver,Selenium Chromedriver,我正试图从中提取数据 点击资本市场和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 Mark

我正试图从中提取数据

点击资本市场和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)
通过使用上面的代码,我可以单击GetData。但它没有表现出产出


请帮助我。提前谢谢。

我对您的代码进行了一些调整,并按如下方式运行了测试:

  • 代码块:

    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()
    

观察 与你的观察类似,我遇到了同样的障碍,但没有结果如下:


深潜 在文本为“获取数据”的元素上,似乎确实发生了
click()
。但是在查看网页的时候,你会发现一些
标签是指带有关键字akam的JavaScripts。例如:

这清楚地表明该网站受到由提供的高级机器人检测服务的保护,并且响应被阻止


机器人管理员 根据该条:


结论 因此可以得出结论,对数据的请求被检测为由驱动实例执行,并且响应被阻止


工具书类 两份文件:


tl;博士 一些相关的讨论:


我对您的代码进行了一些调整,并按如下方式运行了测试:

  • 代码块:

    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()
    

观察 与你的观察类似,我遇到了同样的障碍,但没有结果如下:


深潜 在文本为“获取数据”的元素上,似乎确实发生了
click()
。但是在查看网页的时候,你会发现一些
标签是指带有关键字akam的JavaScripts。例如:

这清楚地表明该网站受到由提供的高级机器人检测服务的保护,并且响应被阻止


机器人管理员 根据该条:


结论 因此可以得出结论,对数据的请求被检测为由驱动实例执行,并且响应被阻止


工具书类 两份文件:


tl;博士 一些相关的讨论:


我在selenium和python方面也面临类似的问题。所以我给了木偶演员一个尝试,如果它是硒的具体问题。即使是未经加工的木偶演员,也显示出同样的问题。我单击“获取数据”按钮,出现空白框,控制台显示未经授权的访问错误。我知道akamai导致了此问题,但qs。这就是如何与之抗争。这是我用来选择数据和绕过akamai的木偶脚本。改变它以适应你的需要

const puppeteer = require('puppeteer-extra')
const StealthPlugin = require('puppeteer-extra-plugin-stealth')
puppeteer.use(StealthPlugin())

async function nse(dates) {
    let launchOptions = {
        headless: false,
        executablePath: 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe', // because we are using puppeteer-core so we must define this option
        args: ['--start-maximized']
    };
    console.log(dates)
    const browser = await puppeteer.launch(launchOptions);
    const page = await browser.newPage();

    // set viewport and user agent (just in case for nice viewing)
    await page.setViewport({ width: 1366, height: 768 });
    await page.setUserAgent('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36');

    // go to the target web
    await page.goto('https://www1.nseindia.com/products/content/derivatives/equities/historical_fo.htm');
    await page.select('#instrumentType', 'OPTIDX')
    await page.select('#symbol', 'NIFTY')
    await page.select('#year', '2020')
    await page.select('#expiryDate', `${dates[0]}`)
    await page.select('#optionType', 'CE')
    await page.waitForSelector('#rdDateToDate');
    let button = 'input[id="rdDateToDate"]';
    await page.evaluate((button) => document.querySelector(button).click(), button);
    // await page.select('#dateRange', '3month')
    await page.waitForSelector('#fromDate');
    await page.$eval('#fromDate', (el,date1) => el.value = date1, dates[1]);
    await page.waitForSelector('#toDate');
    await page.$eval('#toDate', (el,date2) => el.value = date2,dates[2]);
    let selector = 'input[class="getdata-button"]';
    await page.evaluate((selector) => document.querySelector(selector).click(), selector);
    await page.waitForFunction("document.querySelector('.download-data-link') && document.querySelector('.download-data-link').clientHeight != 0");
    const btnNext = await page.$('.download-data-link');
    await page.waitFor(3000);
    await btnNext.click();
    await browser.close()
}


async function input_dates(input) {
    var dates = []
    for (let i = 0; i < input[0].length; i++) {
        dates.push([input[0][i], input[1][i], input[2][i]])

    }
    return dates

}
var data = [['30-01-2020', '27-02-2020', '26-03-2020', '30-04-2020', '28-05-2020'],//expiry date array
['01-Jan-2020', '01-Feb-2020', '01-Mar-2020', '01-Apr-2020', '01-May-2020'],//start date array
['30-Jan-2020', '27-Feb-2020', '26-Mar-2020', '30-Apr-2020', '28-May-2020']]//end date array

input_dates(data).then(async dates => {
    dates.forEach(async el =>{
        nse(el)
    } )
}).catch(err=>console.log(err))
const puppeter=require('puppeter-extra'))
const StealthPlugin=require('puppeter-extra-plugin-steavy')
木偶演员。使用(StealthPlugin())
异步函数nse(日期){
让启动选项={
无头:错,
executablePath:'C:/ProgramFiles(x86)/Google/Chrome/Application/Chrome.exe',//因为我们使用的是Puppeter core,所以必须定义此选项
参数:['--开始最大化']
};
console.log(日期)
const browser=wait puppeter.launch(启动选项);
const page=wait browser.newPage();
//设置视口和用户代理(只是为了更好地查看)
等待page.setViewport({宽度:1366,高度:768});
等待page.setUserAgent('Mozilla/5.0(X11;Linux x86_64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/78.0.3904.108 Safari/537.36');
//转到目标网站
等待页面。转到('https://www1.nseindia.com/products/content/derivatives/equities/historical_fo.htm');
等待页面。选择(“#仪器类型”,“OPTIDX”)
等待页面。选择(“#符号”,“漂亮”)
等待页面。选择(“#年”、“2020年”)
等待页面。选择(“#expiryDate”、“${dates[0]}”)
等待页面。选择(“#选项类型”,“CE”)
wait page.waitForSelector('rdDateToDate');
let button='input[id=“rdDateToDate”];
等待页面。评估((按钮)=>document.querySelector(按钮)。单击(),按钮);
//等待页面。选择(“#日期范围”、“3个月”)
wait page.waitForSelector(“#fromDate”);
等待页面。$eval(“#fromDate”,(el,date1)=>el.value=date1,dates[1]);
等待page.waitForSelector(“#toDate”);
等待页面。$eval(“#toDate”,(el,date2)=>el.value=date2,dates[2]);
让选择器='input[class=“getdata button”];
等待页面。评估((选择器)=>document.querySelector(选择器)。单击(),选择器);
wait page.waitForFunction(“document.querySelector('.download data link')&&document.querySelector('.download data link')。clientHeight!=0”);
const btnNext=等待页面。$('.download data link');
等待页面。等待(3000);
等待下一步。单击();
等待浏览器关闭()
}
异步函数输入\u日期(输入){
变量日期=[]
for(设i=0;i<输入[0]。长度;i++){
日期.推送([输入[0][i]、输入[1][i]、输入[2][i])
}
返回日期
}
var数据=['30-01-2020','27-02-2020','26-03-2020','30-04-2020','28-05-2020',//到期日数组
['01-Jan-2020','01-Feb-2020','01-Mar-2020','01-Apr-2020','01-May-2020'],//开始日期数组
['2020年1月30日'、'2020年2月27日'、'2020年3月26日'、'2020年4月30日'、'2020年5月28日']//结束日期数组
输入日期(数据)。然后(异步日期=>{
dates.forEach(异步el=>{
神经元特异性烯醇化酶(el)
} )
}).catch(err=>console.log(err))

这将下载默认下载目录中的数据。

我在selenium和python中也遇到了类似的问题。所以我给了木偶演员一个尝试,如果它是硒的具体问题。即使