LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 新闻观点 > Selenium Java –使用chromedriver.exe时如何避免网站检测到僵尸程序– The Merkle News

Selenium Java –使用chromedriver.exe时如何避免网站检测到僵尸程序– The Merkle News

2020-12-16 wanbizu AI 来源:区块链网络

如果您正在寻找使网站无法检测到硒bot并与真正的访客没有区别的方法,那么您来对地方了。 在本文中,我将向您展示一些对我有用的方法和技巧。

如果还没有,请确保从piprogramming.org上阅读这篇文章,其中涵盖了10个技巧,以防止机器人检测。 尽管我今天要讲的内容有些相似,但本教程基于上述文章提供的基础知识。 此外,本文还专门针对ChromeDriver用户以及在Eclipse IDE上使用Java开发机器人的用户。 但是,您可以将所有这些概念应用于Firefox和IE。

让我们先介绍一下必须做的事情:

#1清理您的导航器对象

导航器是一个JavaScript对象,其中包含有关您的浏览器的信息。 您只需检查一下元素->控制台,然后输入“console.log(导航器)

默认情况下,通过Selenium启动ChromeDriver.exe时,它将向导航器中添加一个名为WebDriver的变量并将其设置为true。 这意味着任何网站都可以检查您的浏览器导航器是否具有webdriver标志。 无论webdriver设置为true还是false,如果变量存在,那么您必须是机器人。

这就是将webdriver.navigator属性设置为undefined的重要原因。 在这种情况下,如果网站查询navigator.webdriver,它将得到未定义的响应,这是您在任何普通浏览器中都将得到的响应,因为它首先没有webdriver标志。

我可以使用以下代码从浏览器中删除Webdriver:

driver.executeScript(“ Object.defineProperty(navigator,’webdriver’,{get:()=> undefined})”);

驱动程序是ChromeDriver对象。

#2从chromedriver.exe删除跟踪器

ChromeDriver的开发人员似乎在exe文件中放置了一个“跟踪器”,作为Web服务器检测到它的一种后门。 罪魁祸首以唯一变量的形式出现,该变量设置为此确切的字符串:$ cdc_asdjflasutopfhvcZLmcfl_

就我个人而言,我不确定这是否是故意的。 但是无论哪种方式,都必须用另一个相同大小的变量替换此变量。 最简单的方法是使用十六进制编辑器。 就我而言,我使用HxD并搜索var键和bingo!

**请务必注意,此唯一字符串将来可能会更改

尽管此编辑目前将涵盖我们的基础,但这是您必须要做的最低限度的工作,以确保无法检测到您的漫游器。

我建议大家进行的另一项编辑是从chromedriver.exe中删除字符串“ WebDriver”的任何痕迹。 如果您使用十六进制编辑器搜索“ WebDriver”,您实际上会发现它已被多次使用!

称我为偏执狂,但永远不要太小心。 将WebDriver更改为具有相同长度的另一个单词,您距离完成检测不到一步。

如果您想真正地做到周全,那么浏览chromedriver.exe的600,000多个行以查看是否可以识别任何其他潜在的“跟踪器”并不是一个坏主意。 我不会说谎,我还没有这样做,但这绝对在我的TODO列表中。

#3自动获取代理并切换IP地址。

这是您的漫游器应该能够执行的另一个基本功能。 您应该能够自动获取代理并将其分配给chromedriver.exe。 此外,您还应该能够在代理之间自动切换。

有许多不同的方法可以实现这一目标。 对我来说,我使用了pubproxy.com并查询了它们的API。 然后解析响应,并将代理分配给chromedriver.exe。 这是代码:

字符串proxyAPICall =“ http://pubproxy.com/api/proxy?format=txt”;
如果(driver.findElementsByTagName(“ pre”)。size()> 0){
pubProxy = driver.findElementByXPath(“ / html / body / pre”)。getText();
//设置代理
options = new ChromeOptions()。addArguments(“-proxy-server =” + pubProxy);
System.out.println(“ proxy:” .concat(pubProxy));
}

pubproxy在每个API调用上生成一个唯一的代理,这对于我的用例来说是完美的。 请记住,除非您订阅他们的高级会员,否则每天只能调用50个API。

#4有趣的部分

现在是有趣的部分,在这里您需要为浏览器创建一组“身份”。 这意味着不同的用户代理,浏览器窗口大小,屏幕分辨率等等。

本质上,您希望继续切换浏览器指纹,但同时也希望拥有可信的指纹。 成像您正在尝试人为地创建新的人类指纹。 您对图案进行了很大的更改,以至于在仔细检查时看起来并不像正常的人类指纹。 任何仔细查看此假指纹的人都可以立即分辨出它不是真实的人类。

只有在设计漫游器指纹时使用类似的方法才有意义。 要注意的是,不仅您必须设计出可信的浏览器指纹,而且还必须创建许多指纹来避免检测。

有很多不同的方法可以做到这一点,但是最起码的修改是:用户代理浏览器窗口大小

用户代理

对于用户代理,最好将通用用户代理用于浏览器。 您可以使用whatismybrowser.com查找按浏览器类型和版本排序的当今最常用的用户代理列表。

**请记住,您要匹配您的chromedriver.exe使用的Chrome版本,否则,如果您的用户代理版本与实际的浏览器版本不匹配,它将是一个巨大的危险信号。

浏览器窗口大小和屏幕分辨率

您还希望修改浏览器窗口的大小和屏幕分辨率。 毕竟,人们使用不同大小的浏览器。 最好设置自己使用的实际浏览器大小。

没有最好的魔术数字,您必须从模仿真实人类的角度考虑它。 您可以查看W3的“屏幕分辨率统计信息”,以了解一些常见的分辨率。

请务必注意,浏览器窗口大小与显示器上可用的屏幕分辨率之间存在差异。 这些是您必须注意的两个单独的值。 要更改浏览器窗口的大小,请使用以下代码:

options.addArguments(“ window-size = 1920,1080”);

选项是ChromeOptions对象。

要更改屏幕分辨率,您无需与显示器实际混淆。 只需在javascript屏幕对象中修改变量,如下所示:

更改availWidth可用高度宽度高度达到您想要的分辨率。 还要注意pixelDepth和colorDepth,因为您希望它们都与要设置的分辨率相匹配。 要更改这些变量,只需运行以下代码:

driver.executeScript(“ Object.defineProperty(screen,’height’,{value:1080,configurable:true,writeable:true});”);
driver.executeScript(“ Object.defineProperty(screen,’width’,{value:1920,configurable:true,writeable:true});”);
driver.executeScript(“ Object.defineProperty(screen,’availWidth’,{value:1920,configurable:true,writeable:true});”);
driver.executeScript(“ Object.defineProperty(screen,’availHeight’,{value:1080,configurable:true,writeable:true});”);

结论

如果您实现了本文中讨论的所有方法,则大多数Web服务器都不应检测到您的机器人。 请记住,这是最低限度,这意味着这些方法对于主动寻找Selenium机器人的服务器可能还不够。

这是一种猫猫老鼠的游戏,如果您想让自己的机器人不被发现,就必须继续玩。

如果您喜欢这篇文章,并且希望我给您更多有关如何使您的Selenium bot不被发现的想法,请考虑在Twitter上分享它并为我加标签@needforbeans

如果足够多的人对此表示兴趣,那么我有很多关于可以使您的机器人不被发现的方法的想法,我可以与您分享!

—-

原文链接:https://themerkle.com/selenium-java-how-to-avoid-bot-detection-by-websites-when-using-chromedriver-exe/

原文作者:Mark

编译者/作者:wanbizu AI

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...