原文:UWP 在 WebView 中执行 JavaScript 代码(用于模拟用户输入等) - walterlv

UWP 在 WebView 中执行 JavaScript 代码(用于模拟用户输入等)

2018-12-30 14:08

UWP 中使用 WebView 时可以在网页中额外执行一些代码。于是你几乎可以在网页上做任何事情,那些你可以在浏览器控制台中做的事情。

本文将介绍做法。


准备环境

在页面(XAML)中放一个 WebView,然后取个名字,比如就叫做 WebView

监听 NavigationCompleted 事件,然后导航到需要操作的页面。

WebView.NavigationCompleted += OnNavigationCompleted;
WebView.Navigate(new Uri("https://walterlv.com"));
private async void OnNavigationCompleted(WebView sender, WebViewNavigationCompletedEventArgs e)
{
// 我们接下来的代码都将在这里编写。
}

要执行 JavaScript 代码,必须要导航完成才行,所以我们接下来的代码都是写在 NavigationCompleted 事件处理函数中的。

执行 JavaScript 代码

模拟用户输入

下面这一句的代码是填充用户 Id 一栏:

await WebView.InvokeScriptAsync("eval", new[]
{
"document.getElementById('userId').value = 'walterlv';"
});

登录页面截图来自于 码友网

JavaScript eval(string) 函数

在上面的代码中,eval 是指执行 JavaScript 的 eval 函数,并且将后面的字符串数组作为它的参数传入。

在 JavaScript 中,eval(string) 函数可计算某个字符串,并执行其中的的 JavaScript 代码。在计算结束后,会返回一个字符串,就是参数中那个字符串执行完之后的返回值(如果有的话)。

于是意味着你可以通过这种方式拿到输入框中的值:

var userId = await WebView.InvokeScriptAsync("eval", new[]
{
"document.getElementById('userId').value;"
});

执行完后,可以得到 userId 的值是 walterlv 字符串;也就是我们上一步填充的那个值。

模拟用户登录

完整的输入用户名、密码,并点击登录按钮的代码则是这样的:

await LoginWebView.InvokeScriptAsync("eval", new[]
{
"document.getElementById('userId').value = 'walterlv';"
});
await LoginWebView.InvokeScriptAsync("eval", new[]
{
"document.getElementById('password').value = '不想让你看见的密码';"
});
await Task.Delay(1000);
await LoginWebView.InvokeScriptAsync("eval", new[]
{
"document.getElementById('submit').click();"
});

参考资料

本文会经常更新,请阅读原文:
https://walterlv.com/post/invoke-web-script-in-webview.html
,以避免陈旧错误知识的误导,同时有更好的阅读体验。


本作品采用
知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
进行许可。欢迎转载、使用、重新发布,但务必保留文章署名
吕毅
(包含链接:
https://walterlv.com
),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请
与我联系 (walter.lv@qq.com)

Please enable JavaScript to view the comments powered by Disqus.

UWP 在 WebView 中执行 JavaScript 代码(用于模拟用户输入等) - walterlv的更多相关文章

  1. UWP 在 WebView 中执行 JavaScript 代码(用于模拟用户输入等)

    UWP 中使用 WebView 时可以在网页中额外执行一些代码.于是你几乎可以在网页上做任何事情,那些你可以在浏览器控制台中做的事情. 本文将介绍做法. 本文内容 准备环境 执行 JavaScript ...

  2. python中执行javascript代码

    python中执行javascript代码: 1.安装相应的库,我使用的是PyV8 2.import PyV8 ctxt = PyV8.JSContext()     ctxt.enter()     ...

  3. JAVA中执行JavaScript代码并获取返回值

    JAVA中执行JavaScript代码并获取返回值 场景描述 实现思路 技术要点 代码实现 测试方法 运行结果 改进空间 场景描述 今天在CSDN上偶然看到一个帖子对于一段字符串 “var p=‘xx ...

  4. Android WebView中的JavaScript代码使用

    在WebView中使用JavaScript 如果你想要载入的页面中用了JavaScript,你必须为你的WebView使能JavaScript. 一旦使能之后,你也可以自己创建接口在你的应用和Java ...

  5. 尚学堂 215 在java中执行JavaScript代码

    package com.bjsxt.test; import java.io.FileReader; import java.net.URL; import java.util.List; impor ...

  6. Selenium2(WebDriver)中执行JavaScript代码 (转)

    在用selenium编写web页面的自动化测试代码时,可能需要执行一些JavaScript代码,selenium本身就支持执行js,我们在代码中可以使用executeScript.executeAsy ...

  7. 在delphi中执行javascript代码

    有时做项目难免用到代码交叉调用,delphi中执行js就是一种,两种方法可用: 一.使用webbrower,比较麻烦 二.使用ScriptControl,简单方便: 1.首先 uses ComObj; ...

  8. java util - 在java代码中执行javascript代码工具 rhino-1.7.7.jar

    需要 rhino-1.7.7.jar 包 代码示例: package cn.java.mozilla.javascript; import org.mozilla.javascript.Context ...

  9. C# 代码中调用 Javascript 代码段以提高应用程序的配置灵活性(使用 Javascript .NET 与 Jint)

    一般来说,我们需要在开发应用软件的配置文件中,添加一些参数,用于后续用户根据实际情况,自行调整. 配置参数,可以放在配置文件中.环境变量中.或数据库表中(如果使用了数据库的话).通常,配置数据,以 k ...

随机推荐

  1. java和 javaw 以及 javaws的区别

    http://blog.csdn.net/topwqp/article/details/8595936

  2. self.view.layer.contents 和 self.view.backgroundColor

    一. self.view.layer.contents 和 self.view.backgroundColor 今天测了一下 :    self.view.layer.contents 和 self. ...

  3. 如何使用SVN协调代源代码,多人同步开发

    转自linFen原文如何使用SVN协调代源代码,多人同步开发 1.什么是SVN SVN是一种版本管理系统,前身是CVS,是开源软件的基石.即使在沟通充分的情况下,多人维护同一份源代码的一定也会出现混乱 ...

  4. Swift3.0 功能一(持续更新)

    修改项目名称两种方式 1.Bundle name 2.Bundle display name try 三种处理异常的方式 // 在swift中提供三种处理异常的方式 // 方式一:try方式 程序员手 ...

  5. Objective-C中 ==、isEqual、isEqualToString判断字符串相等

    图片发自简书App 在判断一个字符串类型的变量是否与某字符时相等,你可能写下这样一行代码 if (activityType == @"0"){} //activityType是某一 ...

  6. Java 开源博客——B3log Solo 0.6.6 正式版发布了!

    Java 开源博客 -- B3log Solo 0.6.6 正式版发布了!欢迎大家下载. 该版本引入了数据库连接池:Druid. 另外,欢迎观摩 B3log 团队的新项目:Noty,也非常欢迎大家参与 ...

  7. 创建、删除swap分区

    创建 dd if=/dev/zero of=/data/swap bs=1M count=4000 mkswap  /data/swap  swapon   /data/swap  chmod 060 ...

  8. RSA算法原理(转)

    如果你问我,哪一种算法最重要?我可能会回答“公钥加密算法”.因为它是计算机通信安全的基石,保证了加密数据不会被破解.你可以想象一下,信用卡交易被破解的后果. 进入正题之前,我先简单介绍一下,什么是”公 ...

  9. spring mvc redirect 重定向 跳转并传递参数

    在项目中做form表单功能提交时,防止用户客户端后退或者刷新时重复提交问题,需要在服务端进行重定向跳转,具体跳转方式有以下几种方式: 公用代码: @RequestMapping(value=" ...

  10. html5-1 网页结构描述

    html5-1 网页结构描述 一.总结 一句话总结:注意head中的title,keywords,description,这对seo优化很有帮助 1.如何给某元素动态使用类似onclick方法? 点o ...