Winforms webbrowser recaptcha behavior

时间:2017-12-18 11:50:09

标签: c# winforms webbrowser-control recaptcha

我有一个C#winforms应用程序,它登录到在线控制台,使用reCAPTCHA确保您不是机器人。

在我的C#应用​​程序中,每次登录时都必须解决它。但是,当您通过Firefox登录时,只需要检查“我不是机器人”复选框,而无需解决reCAPTCHA:

reCAPTCHA

我已经在注册表中设置了IE版本,所以除此之外,我不知道什么可以控制这种行为。有人能指出我正确的方向吗?

设置IE版本的代码:

private static void SetIE()
{
  int BrowserVer, RegVal;

  // get the installed IE version
  using (WebBrowser Wb = new WebBrowser())
    BrowserVer = Wb.Version.Major;

  // set the appropriate IE version
  if (BrowserVer >= 11)
    RegVal = 11001;
  else if (BrowserVer == 10)
    RegVal = 10001;
  else if (BrowserVer == 9)
    RegVal = 9999;
  else if (BrowserVer == 8)
    RegVal = 8888;
  else
    RegVal = 7000;

  // set the actual key
  using (RegistryKey Key = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", RegistryKeyPermissionCheck.ReadWriteSubTree))
    if (Key.GetValue(System.Diagnostics.Process.GetCurrentProcess().ProcessName + ".exe") == null)
      Key.SetValue(System.Diagnostics.Process.GetCurrentProcess().ProcessName + ".exe", RegVal, RegistryValueKind.DWord);
}

EDIT1 使用IE版本11.786.15063.0,您还需要解决reCAPTCHA以及Edge。

1 个答案:

答案 0 :(得分:0)

如果您将其作为调试运行,那么应用程序名称可能不是您所期望的,并且与您创建的注册表项不匹配。

尝试为YourAppName.vshost.exe添加密钥并重试。 这样的事情可能会有所帮助:

// Assign the application name to a variable
var appName = System.Diagnostics.Process.GetCurrentProcess().ProcessName + ".exe";

// If under debug replace it with the debug name
#if DEBUG
appName = System.Diagnostics.Process.GetCurrentProcess().ProcessName + ".vshost.exe";
#endif 

// Your registry code
...
if (Key.GetValue(appName) == null)
  Key.SetValue(appName, RegVal, RegistryValueKind.DWord);

或者运行Release版本,看看发生了什么。

编辑:

OP评论说,如果他使用Internet Explorer v11.786.15063.0浏览该网站,则会出现同样的问题,您必须解决reCAPTCHA而不是简单地选中该框。

在这种情况下,答案是接受行为或不使用WebBrowser控件,而是使用CefSharp之类的内容。