Python:如何在 Python Selenium 中打开新选项卡而不等待当前选项卡页面加载

问题描述 投票:0回答:3

我在 Chrome 浏览器中成功打开 10 个选项卡(相同的 URL)。但问题是,我的 URL 需要 1 分钟才能加载页面,而且我不想在每个选项卡上等待 1 分钟。

我需要让它加载并想打开另一个选项卡,我知道最终选项卡强制需要一分钟才能加载,但没问题,但我不想为每个选项卡等待 1 分钟。

我可以做什么来实现它?

我用过

time.sleep()
WebDriverWait
driver.switch_to.window(x)
,但没用。

提前致谢

这是我的代码:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common import window
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec

options = webdriver.ChromeOptions()
options.add_experimental_option("detach", True)
options.add_argument("start-maximized")
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
url = 'http://my_url/Index'
driver.get(url)
for _ in range(10):
    driver.get(url)
    driver.switch_to.new_window(window.WindowTypes.TAB) 
python-3.x selenium selenium-webdriver selenium-chromedriver pageloadstrategy
3个回答
1
投票

使用 Python Selenium 打开一个/多个新选项卡而无需等待当前选项卡页面加载的最快方法是使用 execute_script() 方法,如下所示:

  • 代码块:

    driver = webdriver.Chrome(service=s, options=options)
    driver.get('https://stackoverflow.com/')
    for _ in range(10):
        driver.execute_script("window.open('','_blank');")
    
    # switch to opened tab i-th eg 0,1,2
    driver.switch_to.window(driver.window_handles[1]) 
    
  • 浏览器快照:

fast_tabs


0
投票

看起来您每次打开 URL 时都需要创建一个线程

import threading

def main(url)
  # use a different driver for each thread
  options = webdriver.ChromeOptions()
  options.add_experimental_option("detach", True)
  options.add_argument("start-maximized")
  driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
  driver.get(url)
  rand_function1
  return

url = "http://my_url/Index"
for t in range(10):
   t = threading.Thread(target=main, args=[url])
   t.start()

0
投票

要摆脱等待加载打开的选项卡的情况,您需要应用

NONE
PageLoadStrategy
。默认情况下使用
NORMAL
PageLoadStrategy
。根据定义,在这种情况下
WebDriver should wait for the document readiness state to be "complete" after navigation
而您想要
WebDriver should not wait on the document readiness state after a navigation event
策略。
要将其
PageLoadStrategy
应用于您的代码,应将其添加到您的代码中:

caps = DesiredCapabilities().CHROME
caps["pageLoadStrategy"] = "none"

这就是我这边整个代码的样子。它按预期工作

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.chrome.service import Service

options = Options()
options.add_argument("--start-maximized")

caps = DesiredCapabilities().CHROME
caps["pageLoadStrategy"] = "none"
s = Service('C:\webdrivers\chromedriver.exe')

driver = webdriver.Chrome(options=options, desired_capabilities=caps, service=s)
© www.soinside.com 2019 - 2024. All rights reserved.