在nseindia.com上点击获取月度结算统计数据按钮不';t使用Selenium和Python获取结果
我正试图从中提取数据 点击资本市场和2019-20年。我想点击获取数据 我使用了以下代码:在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
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;博士 一些相关的讨论:
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中也遇到了类似的问题。所以我给了木偶演员一个尝试,如果它是硒的具体问题。即使