我正在尝试使用 python抓取https://www.controller.com/,并且由于该页面检测到使用 bot 的机器人pandas.get_html,并且使用用户代理和旋转代理进行请求,因此我求助于使用 selenium webdriver。但是,这也被检测为带有以下消息的机器人。任何人都可以解释我怎样才能克服这个问题?:
请原谅我们的打扰... 当您浏览 www.controller.com 时,您的浏览器的某些方面让我们认为您是一个机器人。发生这种情况的原因有以下几个: 您是一名超级用户,以超人的速度浏览此网站。您已在 Web 浏览器中禁用 JavaScript。第三方浏览器插件(例如 Ghostery 或 NoScript)阻止 JavaScript 运行。此支持文章中提供了其他信息。要请求解锁,请填写下面的表格,我们会尽快审核”
这是我的代码:
from selenium import webdriver
import requests
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
options = webdriver.ChromeOptions()
options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_argument("disable-infobars")
options.add_argument("--disable-extensions")
#options.add_argument('headless')
driver = webdriver.Chrome(chrome_options=options)
driver.get('https://www.controller.com/')
driver.implicitly_wait(30)
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用selenium和chrome在网站中自动执行一项非常基本的任务,但不知何故,网站检测到chrome由硒驱动并阻止每个请求.我怀疑该网站依赖于一个暴露的DOM变量,如/sf/answers/2933311741/来检测selenium驱动的浏览器.
我的问题是,有没有办法让navigator.webdriver标志为假?我愿意在修改之后尝试重新编译硒源,但我似乎无法在存储库中的任何地方找到NavigatorAutomationInformation源https://github.com/SeleniumHQ/selenium
任何帮助深表感谢
PS:我还从https://w3c.github.io/webdriver/#interface尝试了以下内容
Object.defineProperty(navigator, 'webdriver', {
get: () => false,
});
Run Code Online (Sandbox Code Playgroud)
但它只在初始页面加载后更新属性.我认为该网站在我的脚本执行之前检测到该变量.
java selenium webdriver selenium-webdriver webdriver-w3c-spec
将Chrome更新到版本76之后,我无法弄清楚如何隐藏“ Chrome正在由自动化软件控制...”通知,从而覆盖页面上的某些控件。
ChromeDriver的最新稳定版确实是76.0.3809.68。以下代码适用于Chrome 75和ChromeDriver 74。
var options = new ChromeOptions();
options.AddArgument("--test-type");
options.AddArgument("--disable-extensions");
options.AddArguments("disable-infobars");
options.AddArguments("--disable-notifications");
options.AddArguments("enable-automation");
options.AddArguments("--disable-popup-blocking");
options.AddArguments("start-maximized");
var driver = new ChromeDriver(driverLocation, options, ScriptTimeout);
Run Code Online (Sandbox Code Playgroud) c# selenium google-chrome selenium-chromedriver selenium-webdriver
我有一个 Selenium 服务,第一步必须登录到我的 gmail 帐户。此功能在几周前开始工作,但突然登录开始失败,我在浏览器中看到此错误,在 selenium 中的 Chrome 和 Firefox 驱动程序中都尝试过 -
此错误是在 selenium 服务插入电子邮件、密码并单击登录按钮后出现的。谷歌支持论坛也报告了类似的错误 - https://support.google.com/accounts/thread/10916318?hl=en,他们说“谷歌似乎在他们的登录流程中引入了自动化工具检测!” 但在这个线程中没有解决方案。
其他一些可能有用的细节-
如果您需要查看代码,请告诉我,我会在此处发布。提前致谢!
编辑 添加示例代码以供参考。
public void loginGoogleAccount(String emailId, String password) throws Exception {
ChromeOptions options = new ChromeOptions();
options.addArguments("--profile-directory=Default");
options.addArguments("--whitelisted-ips");
options.addArguments("--start-maximized");
options.addArguments("--disable-extensions");
options.addArguments("--disable-plugins-discovery");
WebDriver webDriver = new ChromeDriver(options);
webDriver.navigate().to("https://accounts.google.com");
Thread.sleep(3000);
try {
WebElement email = webDriver.findElement(By.xpath("//input[@type='email']"));
email.sendKeys(emailId);
Thread.sleep(1000);
WebElement emailNext = webDriver.findElement(By.id("identifierNext"));
emailNext.click();
Thread.sleep(1000);
WebDriverWait wait = new WebDriverWait(webDriver, 60);
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("identifierNext")));
Thread.sleep(3000); …Run Code Online (Sandbox Code Playgroud) selenium google-chrome webdriver selenium-chromedriver selenium-webdriver
所以,我正在尝试编写一个脚本来登录https://us.etrade.com/e/t/user/login
我正在使用 Selenium,但它在启动时以某种方式检测到 selenium,并产生一条消息,指出服务器拥挤,当发生这种情况时,我无法登录。我也尝试过使用 unDetected-selenium 以及硒是隐形的,但两者也都被检测到。我真的需要自动化这个登录过程。我尝试过使用 python requests 但不起作用。我对任何其他允许我实现这种自动化的技术或方法持开放态度。请帮忙。
这是我的代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium_stealth import stealth
import time
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
# chrome_options.add_argument('--browser')
chrome_options.add_argument('--no-sandbox')
# chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)
wd = webdriver.Chrome('chromedriver',chrome_options=chrome_options)
stealth(wd,
languages=["en-US", "en"],
vendor="Google Inc.",
platform="Win32",
webgl_vendor="Intel Inc.",
renderer="Intel Iris OpenGL Engine",
fix_hairline=True,
)
wd.get("https://us.etrade.com/e/t/user/login")
Run Code Online (Sandbox Code Playgroud) python selenium selenium-webdriver botdetect selenium-stealth
这是我的第一个Stack Overflow问题,请耐心等待.
我已经阅读了这个问题,这让我想知道,是否有可能让chromedriver完全无法察觉?
为了我自己的好奇心,我测试了所描述的方法,发现创建一个完全匿名的浏览器是不成功的.
我仔细阅读了驱动程序的文档并发现了:
partial interface Navigator { readonly attribute boolean webdriver; };Navigator接口的webdriver IDL属性必须返回webdriver-active标志的值,该标志最初为false.
此属性允许网站确定用户代理受WebDriver控制,并可用于帮助缓解拒绝服务攻击.
但是,我无法通过浏览器控制台或源代码找到这些标签的位置.
我想这将负责检测chromedriver,但是,在梳理完源代码后,我找不到这个界面.结果,它让我想知道这个特征是否包含在当前的chromedriver中.如果没有,我仍然知道当前的chromedriver可以被网站和其他服务如蒸馏检测到.
它说
ChromeDriver 是一个实现W3C WebDriver 标准的独立服务器
看起来W3C WebDriver标准只定义了自动化程序和Chromedriver之间的接口。Chromedriver 充当 HTTP 服务器来从自动化程序获取命令。
但是 ChromeDriver 如何与 Chrome 通信呢?
还是通过HTTP协议?
如果是,我们在哪里可以获得有关详细信息的文档?Chrome 内部的哪个组件负责处理来自 Chromedriver 的命令?它是 Chrome 内置的还是只是 Chrome 的扩展?
selenium google-chrome webdriver selenium-chromedriver selenium-webdriver
将 AWS Lambda 函数与 Python 和 Selenium 结合使用,我想通过无头 chrome 测试来创建无法检测的无头 chrome刮刀。我通过打开测试并截取屏幕截图来检查无头刮刀的不可检测性。我在本地 IDE 和 Lambda 服务器上运行了此测试。
我将使用一个名为selenium-stealth 的python 库,并将遵循其基本配置:
stealth(driver,
languages=["en-US", "en"],
vendor="Google Inc.",
platform="Win32",
webgl_vendor="Intel Inc.",
renderer="Intel Iris OpenGL Engine",
fix_hairline=True,
)
Run Code Online (Sandbox Code Playgroud)
我在本地 IDE 和 AWS Lambda 服务器上实现了此配置以比较结果。
当我在 Lambda 服务器上运行此程序时,WebGL 供应商和渲染器都是空白的。如下所示:
我什至尝试使用以下 JavaScript 命令手动更改 WebGL 供应商/渲染器:
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {"source": "WebGLRenderingContext.prototype.getParameter = function(parameter) {if (parameter === 37445) {return 'VENDOR_INPUT';}if (parameter === 37446) {return 'RENDERER_INPUT';}return getParameter(parameter);};"})
Run Code Online (Sandbox Code Playgroud)
然后我想可能是参数号有问题。我配置了不使用 if 语句的命令执行,但发生了同样的事情:它在我的本地 IDE 上运行,但对 …
javascript python selenium google-chrome amazon-web-services
我试图找出一种方法,每当我在这个特定的脚本中通过Selenium(在Python中)打开Chrome时,Chrome页面会自动打开并选择另一个用户代理 - 在这种情况下,Microsoft Edge Mobile(但我会是从桌面访问它).
因此,在做了一些研究后,我已经能够拼凑出以下代码,我认为这些代码会在Chrome中执行用户代理切换,然后打开一个新的Bing.com页面:
来自selenium import webdriver
来自selenium.webdriver.chrome.options
导入选项opts =选项()
opts.add_argument("user-agent = Mozilla/5.0(Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 640 XL LTE)AppleWebKit/537.36(KHTML,与Gecko一样)Chrome/42.0.2311.135 Mobile Safari/537.36 Edge/12.10166 ")
driver = webdriver.Chrome(chrome_options = opts)
driver = webdriver.Chrome("D:_")
driver.get(" https://www.bing.com/ ")
但是,在打开指定的网页之前,代码似乎没有工作并停止.我很确定上半部分代码是关闭的,但我不太清楚如何.任何和所有的帮助将深表感谢.
我问这个是因为我知道这个线程和这个线程,以及其他关于同一主题的线程,但是每个人在第一个线程中转发的解决方案不再有效。所以请不要将其标记为关闭,因为第一个线程存在。答案是从 2016 年开始的,您可以看到更多最近出现问题的评论。
我正在使用 Selenium 进行一些轻微的网络抓取。我正在与之交互的一个站点清楚地检测到我的浏览器是自动化的(但奇怪的是,只要我还访问我所在地区以外的站点版本,我就在乎,但这既不存在也不存在)。
第一个线程中的解决方案建议使用从此处下载的 chromedriver并对其进行修改。它说要摆脱对其中带有“$cdc$ 的变量的提及。所以我执行以下操作。从该站点下载 v2.41,解压缩它。此版本允许我通过 将 Chrome 与 Selenium 一起使用br = webdriver.Chrome('./chromedriver'),但存在自动化检测问题. 所以,我cp这个来做chromedriver-modified。
在 chromedriver-modified 中,我用 vim 打开它并搜索 $cdc。我在 1934 年左右的链接线程中找到了一个类似(但略有不同)的函数:
function getPageCache(opt_doc, opt_w3c) {
var doc = opt_doc || document;
var w3c = opt_w3c || false;
// var key = '$cdc_asdjflasutopfhvcZLmcfl_';
var key = 'xxxx_asdjflasutopfhvcZLmcfl_';
// var key = 'randomblahhh_';
if (w3c) {
if (!(key in doc))
doc[key] = new CacheWithUUID();
return …Run Code Online (Sandbox Code Playgroud) selenium ×10
python ×5
webdriver ×4
java ×2
botdetect ×1
bots ×1
c# ×1
javascript ×1
user-agent ×1