闽公网安备 35020302035485号
2.通过 ExecuteAsyncScript 方法在后台执行 JavaScript 代码的具体实现。
注意事项:确保已安装待操作的浏览器,并保证其版本与 Selenium.WebDriver 对应的 NuGet 包版本一致。
Selenium.WebDriver Selenium.Chrome.WebDriver或者使用以下命令通过 Package Manager Console 安装:
Install-Package Selenium.WebDriver Install-Package Selenium.Chrome.WebDriver -Version 75.0.0参考文档:如何在 Visual Studio 中使用 NuGet 管理器。
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System;
using System.Threading;
namespace SeleniumExample
{
class Program
{
static void Main(string[] args)
{
// 初始化 ChromeDriver
ChromeDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl("https://www.baidu.com");
// 设置 JavaScript 执行的超时时间
driver.Manage().Timeouts().AsynchronousJavaScript = TimeSpan.FromSeconds(20);
// 使用 JavaScript 输入关键字并点击按钮
driver.ExecuteScript("document.getElementById('kw').value = 'Selenium WebDriver';");
driver.ExecuteScript("document.getElementById('su').click();");
// 堆代码 duidaima.com
// 等待页面加载
Thread.Sleep(2000);
// 网页截图保存到本地
Screenshot screenshot = driver.GetScreenshot();
screenshot.SaveAsFile("E:/baidu.png", ScreenshotImageFormat.Png);
driver.Quit();
Console.WriteLine("操作完成!");
}
}
}
三. 使用 ExecuteAsyncScript 执行 JavaScriptdriver.ExecuteAsyncScript(
"window.setTimeout(arguments[arguments.length - 1], 500);");
上述代码通过 setTimeout 定时 500 毫秒后调用回调函数。driver.ExecuteAsyncScript(
"var callback = arguments[arguments.length - 1];" +
"mailClient.getComposeWindowWidget().onload(callback);");
此代码等待 AJAX 加载完成后,回调函数 callback 通知脚本结束。Object response = driver.ExecuteAsyncScript(
"var callback = arguments[arguments.length - 1];" +
"var xhr = new XMLHttpRequest();" +
"xhr.open('GET', '/resource/data.json', true);" +
"xhr.onreadystatechange = function() {" +
" if (xhr.readyState == 4) {" +
" callback(xhr.responseText);" +
" }" +
"};" +
"xhr.send();");
Console.WriteLine($"响应数据: {response}");
在此示例中,使用 JavaScript 发起异步 HTTP 请求并返回结果。