我们都知道,有时Cloudflare会检查客户端访问者以确保访问者不是真正的人类。安全检查要求我们通过Google Recaptcha。我想问的是,是否可能使用我们自己的服务器来通过该检查(即使使用远程服务器并自己回答验证码)?如何实现?
我们都知道,有时Cloudflare会检查客户端访问者以确保访问者不是真正的人类。安全检查要求我们通过Google Recaptcha。我想问的是,是否可能使用我们自己的服务器来通过该检查(即使使用远程服务器并自己回答验证码)?如何实现?
在这些情况下,潜在的解决方案是使用undetected-chromedriver来初始化Chrome浏览上下文。
undetected-chromedriver是一个经过优化的Selenium Chromedriver补丁,不会触发反机器人服务,如Distill Network / Imperva / DataDome / Botprotect.io。它会自动下载驱动程序二进制文件并打补丁。
Python Sample Code:
import undetected_chromedriver as uc
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
driver = uc.Chrome(options=options)
driver.get('https://bet365.com')
另一种解决方案是通过Project Honey Pot网站对您的IP地址进行白名单处理,具体步骤如下:
详细的端到端过程可以在题为 Attention Required one more step captcha CloudFlare Error 的视频中找到。
当然,有几种方法可以实现。其中一种是使用“真实模拟浏览器”解析JavaScript。
另一种方法是-如果您在无头服务器上运行它-使用一个无头浏览器来代替您完成此操作。在第一次请求后,您可以存储Cookie并在基本HTTP客户端(如Java中的jsoup)中重复使用它。
以下是使用JBrowserDriver(无头)和Java的示例:
JBrowserDriver jBrowserDriver = null;
public JBrowserDriver getDriver(Boolean headless) {
if (jBrowserDriver == null) {
log.info("JBrowser was null, initalizing");
jBrowserDriver = new JBrowserDriver(Settings.builder()
.timezone(Timezone.EUROPE_BERLIN)
.ssl("compatible")
.cache(true)
.javascript(true)
.headless(headless)
.userAgent(UserAgent.CHROME)
.logTrace(true)
.loggerLevel(Level.ALL)
.build());
}
return jBrowserDriver;
}
private void testFunction() {
// ..
jDriver.get("https://cloudflare.site");
driverCookies = jDriver.manage().getCookies();
HashMap<String, String> cookieMap = new HashMap<>();
driverCookies.forEach(cookie -> cookieMap.put(cookie.getName(), cookie.getValue()));
Document document = Jsoup.connect(requestPage).cookies(cookieMap).get();
}
我不对绕过Cloudflare所造成的任何损害负责,但只要人类能够绕过它,就有可能使用模拟客户端进行操作。
编辑:如果还有一个reCaptcha,那么绕过它可能会很困难。但通常情况下,这种情况发生在你没有登录谷歌帐户或者服务器认为你是一个机器人的时候。只需重用由Google身份验证生成的cookie,并确保始终重用并发送相同的cookie。
Cloudflare还会检查-不确定-您的客户端是否请求像CSS和JavaScript这样的资源。
您可能需要使用虚拟客户端请求它们。
由于该问题没有提供用户想要绕过Cloudflare保护的语言,因此我将提供Node.js的代码:
库:
npm i puppeteer-extra puppeteer-extra-plugin-stealth puppeteer
nodejs:
const puppeteer = require('puppeteer-extra')
const pluginStealth = require('puppeteer-extra-plugin-stealth')
const { executablePath } = require('puppeteer')
const link = 'https://www.g2.com/'
const getHtmlThoughCloudflare = async (url) => {
puppeteer.use(pluginStealth())
const result = await puppeteer
.launch({ headless: true })
.then(async (browser) => {
const page = await browser.newPage()
await page.goto(url)
const html = await page.content()
await browser.close()
return html
})
console.log(` HTML: ${result}`)
return result // html
}
getHtmlThoughCloudflare(link)