c# - 使用 selenium 浏览器自动化时如何避免访问被拒绝
问题描述
我将尝试用示例代码描述问题。这是 C# 中的代码,它打开 Chrome 浏览器的实例并导航到 nseindia.com:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
namespace nseindia_selenium
{
class Program
{
static void Main( string [ ] args )
{
ChromeOptions options = new ChromeOptions ();
options.BinaryLocation = "C:\\Users\\Subhasis\\AppData\\Local\\Chromium\\Application\\chrome.exe";
//options.AddAdditionalCapability ( "w3c" , true );
options.AddArgument ( "no-sandbox" );
options.AddArgument ( "start-maximized" );
options.AddArgument ( "disable-gpu");
options.AddArgument ( "user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36" );
options.AddExcludedArgument ( "enable-automation" );
options.AddAdditionalCapability ( "useAutomationExtension" , false );
//options.AddAdditionalCapability ( "chrome.page.customHeaders.referrer" , "https://www.nseindia.com" );
ChromeDriver chrome1 = new ChromeDriver (options);
chrome1.Navigate ().GoToUrl ( "https://www.nseindia.com/" );
}
}
}
事情似乎进展到了这一步(并非真的,所有数据字段都显示为空)。但是在这个阶段,如果我手动控制浏览器窗口并尝试浏览到 nseindia.com 的任何其他部分,我会收到错误消息:
在这一点上,即使我尝试回到网站的主页,它也不会让我这样做。
过去对同一问题的回答建议手动设置引荐来源网址。但当我这样做时,
options.AddAdditionalCapability ( "chrome.page.customHeaders.referrer" , "https://www.nseindia.com" );
它给了我“无效参数”错误。此外,如果是推荐人的错,这并不能解释为什么手动单击链接不起作用。
过去的答案还建议使用
options.AddAdditionalCapability ( "useAutomationExtension" , false );
但这不再起作用了,因为我收到了这条消息:
[1601022727.512][WARNING]: Deprecated chrome option is ignored: useAutomationExtension
[1601022727.512][WARNING]: Deprecated chrome option is ignored: useAutomationExtension
在过去,这曾经是因为错误的 w3c 模式而发生的,但我也不能再切换 w3c 模式了。当我把
options.AddAdditionalCapability ( "w3c" , true );
我收到一条错误消息:
System.ArgumentException: 'There is already an option for the w3c capability. Please use the instead.
Parameter name: capabilityName'
那我该怎么办?
解决方案
推荐阅读
- android - Android - 在“network_security_config.xml”中以纯文本形式存储证书哈希是否足够安全?
- php - 搜索框 (AJAX) 不会加载请求的数据
- kubernetes - 从 Azure DevOps 部署到 AKS 时如何传入环境变量
- c# - 命名空间名称身份验证在命名空间 Microsoft.AspNetCore.Components.WebAssembly.Authentication 中不存在
- django - 如何通过 Django 中的多对多关系访问另一个表中的属性?
- javascript - 如何让 Discord 机器人等待我的消息?
- mongodb - MongoDB Atlas 与 PowerShell 的交互
- typeorm - 软删除时相关实体的TypeORM onDelete设置
- python - Matplotlib:小刻度未显示
- javascript - 按钮不起作用,显然它没有定义