让我们考虑两种不同的方法,
一种是我们可以限制整个网络,另一种是我们可以指定具体限制哪些网络请求。
方法一:限制整个网络
const { Builder } = require("selenium-webdriver")
async function throttleNetwork() {
let driver = await new Builder().forBrowser("chrome").build();
await driver.setNetworkConditions({
offline: false,
latency: 5000, // Additional latency (ms).
download_throughput: 50 * 1024, // Maximal aggregated download throughput.
upload_throughput: 50 * 1024, // Maximal aggregated upload throughput.
});
driver.get("http://www.google.com/");
}
感谢Yaroslav指出提交。
这有一个缺点,我们无法指定特定的网络请求来限制,而其余的则不受限制。
让我们在下一个方法中解决这个缺点。
方法 2:限制特定的网络请求
在这里,我们将使用一个名为Requestly for Selenium的 npm 包。
我们需要首先在他们的客户端应用程序中创建一个规则,并通过创建一个共享列表来获取链接。
例如,让我们限制对 google.com 的网络请求
require("chromedriver");
const { Builder } = require("selenium-webdriver");
const chrome = require("selenium-webdriver/chrome");
const {
getRequestlyExtension,
importRequestlySharedList,
} = require("@requestly/selenium");
const sharedListUrl = "YOUR_SHARED_LIST_LINK_HERE" // For example, use "https://app.requestly.io/rules/#sharedList/1631611216670-delay"
async function throttleGoogle() {
const options = new chrome.Options().addExtensions(
getRequestlyExtension("chrome") // This installs requestly chrome extension in your testing instance
);
const driver = new Builder()
.forBrowser("chrome")
.setChromeOptions(options)
.build();
await importRequestlySharedList(driver, sharedListUrl); // Here we import the shared list we created some time back
driver.get("http://www.google.com/");
}
这是对我们如何克服仅硒方法的缺点的高级概述。我已经写了一篇关于如何创建规则、共享列表等的博客。你可以在这里阅读。