Node.js, Python (Puppeteer, Selenium) | WAF - Cloudflare Korumalı Sitelere Girmek
Web Scraping Nedir?
Web scraping, internet üzerindeki web sitelerinden otomatik olarak veri toplama işlemidir.
Örneğin şu alanlarda kullanılır;
- Açık Kaynak İstihbaratı (OSINT)
- Dağıtım İzleme
- Kimlik Avı Tespiti
- Güvenlik Açıklarını Tespit Etme
- Sosyal Medya Otomasyonları
- Hesap Oluşturucu Yazılımlar
- Site İzleme ve Bilgi Toplama
Yapacağımız İşlemler Nelerdir?
Web scraping yaparken, içerisinde WAF (Güvenlik Duvarı) bulunan sitelere denk gelebilirsiniz. Eğer bu durumlarla karşılaşırsanız şu anda puppeteer veya selenium kütüphaneleri ile bu güvenlik duvarlarını aşamazsınız. Puppeteer'in öncelikle cloudflare ve diğer wafların önüne geçmek için yaptığı daha insansıl davranan bir versiyonu olan puppeteer-extra kütüphaneside fixlenmiştir. Selenium üzerindede çoğu yöntem fixlendiği için maalesef etkisiz kalıyor.
puppeteer-real-browser kütüphanesini kullanmak bizi gerçek human bir görünümünde sitelere sokacaktır.
Bu kütüphanede puppeteer-extra modüllerinide kullanabileceğiz. (Captcha atlama vb.)
Normal Puppeteer ve Selenium Kullandığımızda
Bir örneğimiz hesap oluşturucu örneğimizden gelirken diğer örneğimiz ise, bir sitede güvenlik açıklarını otomatikleştirilmiş yazılımlar ile yaparken Cloudflare tarafından engellendiğimizi gösteriyor. Bir süre izin verebilir fakat ardından gördüğünüz gibi ip adresimiz WAF tarafından kara listeye alınmaktadır. Eğer sistem üzerinde "Under Attack" mod açıksa siteye asla giremezsiniz. Cloudflare doğrulama ekranında sürekli dönüp durduğunuzu göreceksiniz.
Bunları geçebilmek için Node.js tarafında Puppeteer-real-browser kullanacağız.
Puppeteer-Real-Browser Kullandığımızda
Gördüğünüz gibi yine bir görselde hesap oluşturucu yazılımı denerken, diğer yazılımda ise güvenlik açıklarını test etmek için siteye girerken Under Attack mod açık olmasına rağmen güvenlik ekranını başarıyla geçiyoruz.
Puppeteer-Real-Browser | Kurulum ve Kullanım
* Bu işlemleri yapmadan önce ortamınızda Node.js kurulu olmalıdır.
1. Masaüstünüzde bir klasör açınız.
2. Klasörü bir kod editörü ile açınız.
3. app.js adında bir dosya oluşturun ve içine aşağıdaki kodu yükleyin.
4. Konsolu açtıktan sonra npm i [email protected] yazınız ve modülü yükleyiniz.
Web Scraping Nedir?
Web scraping, internet üzerindeki web sitelerinden otomatik olarak veri toplama işlemidir.
Örneğin şu alanlarda kullanılır;
- Açık Kaynak İstihbaratı (OSINT)
- Dağıtım İzleme
- Kimlik Avı Tespiti
- Güvenlik Açıklarını Tespit Etme
- Sosyal Medya Otomasyonları
- Hesap Oluşturucu Yazılımlar
- Site İzleme ve Bilgi Toplama
Yapacağımız İşlemler Nelerdir?
Web scraping yaparken, içerisinde WAF (Güvenlik Duvarı) bulunan sitelere denk gelebilirsiniz. Eğer bu durumlarla karşılaşırsanız şu anda puppeteer veya selenium kütüphaneleri ile bu güvenlik duvarlarını aşamazsınız. Puppeteer'in öncelikle cloudflare ve diğer wafların önüne geçmek için yaptığı daha insansıl davranan bir versiyonu olan puppeteer-extra kütüphaneside fixlenmiştir. Selenium üzerindede çoğu yöntem fixlendiği için maalesef etkisiz kalıyor.
puppeteer-real-browser kütüphanesini kullanmak bizi gerçek human bir görünümünde sitelere sokacaktır.
Bu kütüphanede puppeteer-extra modüllerinide kullanabileceğiz. (Captcha atlama vb.)
Normal Puppeteer ve Selenium Kullandığımızda
Bir örneğimiz hesap oluşturucu örneğimizden gelirken diğer örneğimiz ise, bir sitede güvenlik açıklarını otomatikleştirilmiş yazılımlar ile yaparken Cloudflare tarafından engellendiğimizi gösteriyor. Bir süre izin verebilir fakat ardından gördüğünüz gibi ip adresimiz WAF tarafından kara listeye alınmaktadır. Eğer sistem üzerinde "Under Attack" mod açıksa siteye asla giremezsiniz. Cloudflare doğrulama ekranında sürekli dönüp durduğunuzu göreceksiniz.
Bunları geçebilmek için Node.js tarafında Puppeteer-real-browser kullanacağız.
Puppeteer-Real-Browser Kullandığımızda
Gördüğünüz gibi yine bir görselde hesap oluşturucu yazılımı denerken, diğer yazılımda ise güvenlik açıklarını test etmek için siteye girerken Under Attack mod açık olmasına rağmen güvenlik ekranını başarıyla geçiyoruz.
Puppeteer-Real-Browser | Kurulum ve Kullanım
* Bu işlemleri yapmadan önce ortamınızda Node.js kurulu olmalıdır.
1. Masaüstünüzde bir klasör açınız.
2. Klasörü bir kod editörü ile açınız.
3. app.js adında bir dosya oluşturun ve içine aşağıdaki kodu yükleyin.
4. Konsolu açtıktan sonra npm i [email protected] yazınız ve modülü yükleyiniz.
JavaScript:
import { connect } from 'puppeteer-real-browser';
const start = async () => {
const { page, browser } = await connect({
tf: false,
turnstile: true, // burası açık olduğunda cloudflare otomatik geçilecektir
args: [
'--lang=en-US',
'--intl.accept_languages=en-US',
'--disable-dev-shm-usage',
'--disable-accelerated-2d-canvas',
'--disable-gpu',
'--window-size=1920,1080',
'--hide-scrollbars',
'--disable-notifications',
'--disable-popup-blocking',
'--enable-webgl',
'--disable-infobars',
'--disable-application-cache',
'--disable-offline-load-stale-cache',
'--disable-gpu-shader-disk-cache',
'--media-cache-size=0',
'--disk-cache-size=0',
'--disable-web-security',
'--disable-features=IsolateOrigins,site-per-process',
'--allow-running-insecure-content',
'--disable-blink-features=AutomationControlled',
'--no-sandbox',
'--mute-audio',
'--no-zygote',
'--no-xshm',
'--no-first-run',
'--no-default-browser-check',
'--disable-dev-shm-usage',
'--disable-gpu',
'--enable-webgl',
'--ignore-certificate-errors',
'--lang=en-US,en;q=0.9',
'--password-store=basic',
'--disable-software-rasterizer',
'--disable-background-timer-throttling',
'--disable-backgrounding-occluded-windows',
'--disable-renderer-backgrounding',
'--disable-infobars',
'--disable-breakpad',
'--disable-canvas-aa',
'--disable-2d-canvas-clip-aa',
'--disable-gl-drawing-for-tests',
'--disable-popup-blocking',
'--enable-low-end-device-mode',
'--disable-blink-features=AutomationControlled',
'--start-maximized',
],
headless: 'auto',
customConfig: {},
skipTarget: [],
fingerprint: true,
connectOption: {},
});
await page.goto('https://siteadi.com', { waitUntil: 'networkidle0' });
};
start();
Captchaları Otomatik Atlamak
Bunun için 2captcha, capsolver gibi servisler kullanacağız.
Fakat normalde sadece puppeteer-extra üzerinde kullanılan bir captcha eklentisi olan puppeteer-extra-plugin-recaptcha mevcut.
1. Bunu puppeteer-real-browser üzerinde kullanmak için, node_modules dosyasına giriniz.
2. puppeteer-real-browser'i bulunuz.
3. src klasörünü açınız ve index.js dosyasına giriniz.
İndex.js dosyasını şu şekilde değiştiriniz:
Bunun için 2captcha, capsolver gibi servisler kullanacağız.
Fakat normalde sadece puppeteer-extra üzerinde kullanılan bir captcha eklentisi olan puppeteer-extra-plugin-recaptcha mevcut.
1. Bunu puppeteer-real-browser üzerinde kullanmak için, node_modules dosyasına giriniz.
2. puppeteer-real-browser'i bulunuz.
3. src klasörünü açınız ve index.js dosyasına giriniz.
İndex.js dosyasını şu şekilde değiştiriniz:
JavaScript:
import { startSession, closeSession } from './module/chromium.js'
import puppeteer from 'puppeteer-extra';
import anticaptcha from 'puppeteer-extra-plugin-recaptcha';
import Stealth from 'puppeteer-extra-plugin-stealth';
import { notice, slugify } from './module/general.js'
import { autoSolve, setSolveStatus } from './module/turnstile.js'
import { fp } from './module/afp.js';
import { puppeteerRealBrowser } from './module/old.js'
export { puppeteerRealBrowser };
puppeteer.use(anticaptcha({
provider: {
id: '2captcha',
token: 'apikey',
},
visualFeedback: true,
throwOnError: true
}));
var global_target_status = true
function targetFilter({ target, skipTarget }) {
if (global_target_status === false) {
return true
}
var response = !!target.url()
if (skipTarget.find(item => String(target.url()).indexOf(String(item) > -1))) {
response = true
}
return response;
}
async function handleNewPage(page) {
fp(page);
return page
}
const setTarget = ({ status = true }) => {
global_target_status = status
}
export const connect = ({ args = [], headless = 'auto', customConfig = {}, proxy = {}, skipTarget = [], fingerprint = true, turnstile = false, connectOption = {}, tf = true }) => {
return new Promise(async (resolve, reject) => {
global_target_status = tf
const { chromeSession, cdpSession, chrome, xvfbsession } = await startSession({
args: args,
headless: headless,
customConfig: customConfig,
proxy: proxy
})
const browser = await puppeteer.connect({
targetFilter: (target) => targetFilter({ target: target, skipTarget: skipTarget }),
browserWSEndpoint: chromeSession.browserWSEndpoint,
...connectOption
});
var page = await browser.pages()
page = page[0]
if (proxy && proxy.username && proxy.username.length > 0) {
await page.authenticate({ username: proxy.username, password: proxy.password });
}
if (fingerprint === true) {
handleNewPage(page);
}
if (turnstile === true) {
setSolveStatus({ status: true })
autoSolve({ page: page, browser: browser })
}
await page.setUserAgent(chromeSession.agent);
await page.setViewport({
width: 1920,
height: 1080
});
browser.on('disconnected', async () => {
notice({
message: 'Browser Disconnected',
type: 'info'
})
setSolveStatus({ status: false })
await closeSession({
xvfbsession: xvfbsession,
cdpSession: cdpSession,
chrome: chrome
})
});
browser.on('targetcreated', async target => {
var newPage = await target.page();
try {
await newPage.setUserAgent(chromeSession.agent);
} catch (err) {
// console.log(err.message);
}
try {
await newPage.setViewport({
width: 1920,
height: 1080
});
} catch (err) {
// console.log(err.message);
}
if (newPage && fingerprint === true) {
try {
handleNewPage(newPage);
} catch (err) { }
}
if (turnstile === true) {
autoSolve({ page: newPage })
}
});
resolve({
browser: browser,
page: page,
xvfbsession: xvfbsession,
cdpSession: cdpSession,
chrome: chrome,
setTarget: setTarget
})
})
}
Apikey bölümüne kendi 2captcha anahtarınızı girmeniz gerekmektedir. Artık captcha sisteminide kurmuş bulunuyorsunuz.
Karşınıza çıkan Hcaptcha, recaptcha gibi bot doğrulamalarını atlamak için main dosyanızda şu kodu kullanmalısınız:
Ekstra olarak işlemlerinizde Random Mouse hareketleri kullanmayı unutmayınız:
Karşınıza çıkan Hcaptcha, recaptcha gibi bot doğrulamalarını atlamak için main dosyanızda şu kodu kullanmalısınız:
JavaScript:
await page.solveRecaptchas();
Ekstra olarak işlemlerinizde Random Mouse hareketleri kullanmayı unutmayınız:
JavaScript:
const moveMouseRandomly = async (page, iterations = 10) => {
const { width, height } = await page.viewport();
for (let i = 0; i < iterations; i++) {
const x = Math.floor(Math.random() * width);
const y = Math.floor(Math.random() * height);
await page.mouse.move(x, y, { steps: Math.floor(Math.random() * 20) + 10 });
await page.waitForTimeout(Math.floor(Math.random() * 500) + 200);
}
};
Hayırlı forumlar dilerim.



