我正在嘗試使用 selenium webdriver 庫運行 2 個 chrome 瀏覽器實體。然而,即使這兩個瀏覽器分別啟動并在不同的執行緒中,代碼也只控制和操作一個瀏覽器。
用于創建 Chrome 瀏覽器并執行測驗的代碼
static void test(string url)
{
ChromeDriver driver = BrowserWorker.GetChromeBrowser(false);
driver.Navigate().GoToUrl(url);
}
“BrowserWorkser.GetChromeBrowser”函??數是回傳一個自定義的chrome瀏覽器實體:
public static ChromeDriver GetChromeBrowser()
{
var chromeoptions = new ChromeOptions();
chromeoptions.AddArguments("--disable-notifications");
chromeoptions.AddArguments("--no-sandbox");
chromeoptions.AddArguments("--disable-dev-shm-usage");
chromeoptions.UnhandledPromptBehavior = UnhandledPromptBehavior.Dismiss;
chromeoptions.AddArguments("--remote-debugging-port=9222");
var chromeDriverService = ChromeDriverService.CreateDefaultService(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
chromeDriverService.HideCommandPromptWindow = true;
ChromeDriver browser = null;
int nCount = 0;
while (browser == null && nCount < 3)
{
try
{
browser = new ChromeDriver(chromeDriverService, chromeoptions, TimeSpan.FromSeconds(180));
}
catch (Exception ex)
{
Console.WriteLine("Error initializing chrome browser: " ex.Message);
}
nCount ;
}
return browser;
}
第一種方法:
var t1 = new Thread(() => test("https://www.google.com/"));
var t2 = new Thread(() => test("https://www.bing.com/"));
t1.Start();
t2.Start();
第二種方法,將“test(string url)”的簽名改為“async Task”并添加“await Task.Delay(1);”,這樣編譯器就不會報錯:
var list = new List<Task>();
list.Add(test("https://www.google.com/"));
list.Add(test("https://www.bing.com/"));
Task.WaitAll(list.ToArray());
然而,這兩種方法都沒有奏效。兩個單獨的執行緒/任務控制同一個瀏覽器實體,它以隨機順序加載 google 和 bing。如果您需要其他資訊,請告訴我。謝謝你。
uj5u.com熱心網友回復:
如果您使用不同的引數啟動 Chrome,它會啟動一個新實體。因此,在這種情況下--remote-debugging-port,使用不同的埠將使驅動程式啟動一個新實體,而不是使用現有實體。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/402966.html
標籤:
上一篇:型別錯誤:__init__()使用帶有公司pac檔案的PythonSeleniumChromeDriver出現意外的關鍵字引數“服務”錯誤
