Selenium 线程与硒

Selenium 线程与硒,selenium,selenium-webdriver,selenium-chromedriver,python-multithreading,Selenium,Selenium Webdriver,Selenium Chromedriver,Python Multithreading,我试图在Selenium中创建多个选项卡,并在每个选项卡上同时打开一个页面。这是代码 CHROME_DRIVER_PATH = "C:/chromedriver.exe" from selenium import webdriver import threading driver = webdriver.Chrome(CHROME_DRIVER_PATH) links = ["https://www.google.com/", "https://stackoverflow.

我试图在Selenium中创建多个选项卡,并在每个选项卡上同时打开一个页面。这是代码

CHROME_DRIVER_PATH = "C:/chromedriver.exe"

from selenium import webdriver
import threading
driver = webdriver.Chrome(CHROME_DRIVER_PATH)

links = ["https://www.google.com/",
         "https://stackoverflow.com/",
         "https://www.reddit.com/",
         "https://edition.cnn.com/"]

def open_page(url, tab_index):
    driver.switch_to_window(handles[tab_index])
    driver.get(url)
    return

# open a blank tab for every link in the list
for link in range(len(links)-1 ): # 1 less because first tab is already opened
    driver.execute_script("window.open();")

handles = driver.window_handles # get handles

all_threads = []
for i in range(0, len(links)):
    current_thread = threading.Thread(target=open_page, args=(links[i], i,))
    all_threads.append(current_thread)
    current_thread.start()

for thr in all_threads:
    thr.join()


执行时不会出错,据我所知,这在逻辑上应该是正确的。但是,这个项目的效果并不像我想象的那样。它一次只打开一页,有时甚至不切换选项卡。。。在我的代码中是否有我不知道的问题,或者线程不适用于Selenium?

无需切换到新窗口以获取URL,您可以尝试在下面的“新建”选项卡中逐个打开每个URL:

links = ["https://www.google.com/",
         "https://stackoverflow.com/",
         "https://www.reddit.com/",
         "https://edition.cnn.com/"]

# Open all URLs in new tabs
for link in links:
    driver.execute_script("window.open('{}');".format(link))

# Closing main (empty) tab
driver.close()

现在,您可以从
驱动程序处理(如果需要)所有窗口。窗口\u照常处理

无需切换到新窗口以获取URL,您可以尝试在下面的新选项卡中逐个打开每个URL:

links = ["https://www.google.com/",
         "https://stackoverflow.com/",
         "https://www.reddit.com/",
         "https://edition.cnn.com/"]

# Open all URLs in new tabs
for link in links:
    driver.execute_script("window.open('{}');".format(link))

# Closing main (empty) tab
driver.close()

现在,您可以从
驱动程序处理(如果需要)所有窗口。窗口\u像往常一样处理
python多线程
是您的用例的强制性要求吗?在Selenium中遍历多个选项卡可以用更简单的方法完成是的,我希望使用多线程同时打开多个链接
python多线程
是您的用例的强制性要求吗?在Selenium中遍历多个选项卡可以以更简单的方式完成是的,我希望使用多线程同时打开多个链接OK,但这并不能真正回答我关于线程和Selenium的问题。此代码将逐个链接并在新选项卡中打开。但是有可能在不同的选项卡中同时打开所有链接吗?@DoctorEvil,线程或多处理的要点是并行运行进程(因为GIL,这实际上是不可能的),而不是同时启动某些东西。因此,在任何情况下,您都将逐个打开每一页,但不能同时打开。还要注意,您不能手动打开多个选项卡。。。Selenium也不能做到这一点……好吧,但这并不能真正回答我关于线程和Selenium的问题。此代码将逐个链接并在新选项卡中打开。但是有可能在不同的选项卡中同时打开所有链接吗?@DoctorEvil,线程或多处理的要点是并行运行进程(因为GIL,这实际上是不可能的),而不是同时启动某些东西。因此,在任何情况下,您都将逐个打开每一页,但不能同时打开。还要注意,您不能手动打开多个选项卡。。。硒也不能做到这一点。。。