相关疑难解决方法(0)

网页正在使用 Chromedriver 作为机器人检测 Selenium Webdriver

我正在尝试使用 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)

python selenium bots webdriver selenium-webdriver

11
推荐指数
1
解决办法
3万
查看次数

Selenium webdriver:修改navigator.webdriver标志以防止硒检测

我正在尝试使用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

10
推荐指数
9
解决办法
5531
查看次数

Chrome v76中无法隐藏“ Chrome正在由自动化软件控制”信息栏

将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

10
推荐指数
2
解决办法
4167
查看次数

登录 gmail 账户失败(selenium 自动化)

我有一个 Selenium 服务,第一步必须登录到我的 gmail 帐户。此功能在几周前开始工作,但突然登录开始失败,我在浏览器中看到此错误,在 selenium 中的 Chrome 和 Firefox 驱动程序中都尝试过 -

在此处输入图片说明

此错误是在 selenium 服务插入电子邮件、密码并单击登录按钮后出现的。谷歌支持论坛也报告了类似的错误 - https://support.google.com/accounts/thread/10916318?hl=en,他们说“谷歌似乎在他们的登录流程中引入了自动化工具检测!” 但在这个线程中没有解决方案。

其他一些可能有用的细节-

  • 我无法在
    Selenium 打开的浏览器中手动登录 Google 帐户。
  • 但是我可以在 Google Chrome 应用程序中手动登录这些帐户。

如果您需要查看代码,请告诉我,我会在此处发布。提前致谢!

编辑 添加示例代码以供参考。

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

10
推荐指数
2
解决办法
1万
查看次数

如何自动登录到正在检测我使用 selenium-stealth 登录的尝试的网站

所以,我正在尝试编写一个脚本来登录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

10
推荐指数
1
解决办法
1万
查看次数

如何让chromedriver无法察觉

这是我的第一个Stack Overflow问题,请耐心等待.

我已经阅读了这个问题,这让我想知道,是否有可能让chromedriver完全无法察觉?

为了我自己的好奇心,我测试了所描述的方法,发现创建一个完全匿名的浏览器是不成功的.

我仔细阅读了驱动程序的文档并发现了:

partial interface Navigator { readonly attribute boolean webdriver; };

Navigator接口的webdriver IDL属性必须返回webdriver-active标志的值,该标志最初为false.

此属性允许网站确定用户代理受WebDriver控制,并可用于帮助缓解拒绝服务攻击.

但是,我无法通过浏览器控制台或源代码找到这些标签的位置.

我想这将负责检测chromedriver,但是,在梳理完源代码后,我找不到这个界面.结果,它让我想知道这个特征是否包含在当前的chromedriver中.如果没有,我仍然知道当前的chromedriver可以被网站和其他服务如蒸馏检测到.

java selenium selenium-chromedriver

9
推荐指数
2
解决办法
8322
查看次数

Chrome 驱动程序如何与 Chrome 浏览器交互?

它说

ChromeDriver 是一个实现W3C WebDriver 标准的独立服务器

看起来W3C WebDriver标准只定义了自动化程序和Chromedriver之间的接口。Chromedriver 充当 HTTP 服务器来从自动化程序获取命令。

但是 ChromeDriver 如何与 Chrome 通信呢?

还是通过HTTP协议?

如果是,我们在哪里可以获得有关详细信息的文档?Chrome 内部的哪个组件负责处理来自 Chromedriver 的命令?它是 Chrome 内置的还是只是 Chrome 的扩展?

selenium google-chrome webdriver selenium-chromedriver selenium-webdriver

9
推荐指数
2
解决办法
2万
查看次数

Python Selenium AWS Lambda 更改 WebGL 供应商/渲染器以实现无法检测的 Headless Scraper

概念:

将 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 服务器上实现了此配置以比较结果。


本地IDE:

下面是在本地IDE上运行的测试结果: 在此输入图像描述


拉姆达服务器:

当我在 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

9
推荐指数
1
解决办法
3858
查看次数

如何在Selenium中更改Google Chrome用户代理?

我试图找出一种方法,每当我在这个特定的脚本中通过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/ ")

但是,在打开指定的网页之前,代码似乎没有工作并停止.我很确定上半部分代码是关闭的,但我不太清楚如何.任何和所有的帮助将深表感谢.

python selenium user-agent google-chrome selenium-webdriver

8
推荐指数
2
解决办法
2万
查看次数

Selenium 不适用于为避免检测而修改的 chromedriver

我问这个是因为我知道这个线程这个线程,以及其他关于同一主题的线程,但是每个人在第一个线程中转发的解决方案不再有效。所以请不要将其标记为关闭,因为第一个线程存在。答案是从 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)

python selenium selenium-chromedriver selenium-webdriver

8
推荐指数
1
解决办法
4546
查看次数