【问题标题】:Anglesharp and Xamarin.Forms OpenAsync does not work in.Droid projectAnglesharp 和 Xamarin.Forms OpenAsync 在.Droid 项目中不起作用
【发布时间】:2016-11-20 15:39:49
【问题描述】:

我目前有一个用 Java 编写的 Android 应用程序,我正在用 Xamarin.Forms 重写它以支持 iOS。在 Android 应用程序中我使用 Jsoup,在 Xamarin 应用程序中我使用 AngleSharp。

我的问题是以下代码适用于 iOS 和 UWP,但不适用于 Droid 项目。

我的怀疑是调用 context.OpenAsync(url); 时没有建立连接

我有

<uses-permission android:name="android.permission.INTERNET" />

在我的 Android 清单中。我的目标是 minSdk=17,targetSdk=24。 这个问题在模拟器和我的 Galaxy S7 上都存在。

代码:

try
        {
                var url = "<URL>";
                var configuration = Configuration.Default.WithDefaultLoader().WithCookies();
                var context = BrowsingContext.New(configuration);
                var document = await context.OpenAsync(url);
                IHtmlInputElement username = document.QuerySelector("input[id='username']") as IHtmlInputElement;
                IHtmlInputElement password = document.QuerySelector("input[id='password']") as IHtmlInputElement;
                IHtmlFormElement loginform = document.QuerySelector("form[id='logonForm']") as IHtmlFormElement;

                username.Value = "<uname>";
                password.Value = "<pword>";
                document = await loginform.SubmitAsync();

                Debug.WriteLine(context.Active.Url);
            }
            catch (Exception e)
            {
                Debug.WriteLine("ERROR " + e);
            }

铌。由于隐私,我没有显示网址或用户名和密码。 任何帮助表示赞赏!

【问题讨论】:

  • 异常/堆栈跟踪?
  • 无,除了 username.Value 给出错误 System.NullReferenceException: 对象引用未设置为对象实例的事实。这是正确的,因为没有定义任何元素。

标签: android xamarin web-scraping anglesharp


【解决方案1】:

这不是 AngleSharp 的问题,而是下面的 Mono 堆栈的问题。确保您已授予应用程序必要的权限。还要确保接受潜在的证书(如果该页面是通过 HTTPS 访问的)。 Android 将拒绝不符合权限模型的请求(例如,应用没有权限、未安装的自签名证书……)。

希望这会有所帮助! (不幸的是,该问题的确切问题从未被发现/传达 - 请参阅corresponding GitHub issue)。

【讨论】:

    猜你喜欢
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多