通过Selenium - Python在新标签页中打开网址的最快方法是什么?

时间:2017-11-29 01:52:40

标签: python google-chrome selenium selenium-webdriver selenium-chromedriver

我想创建一个python脚本来打开很多标签

import os
import selenium
from selenium import webdriver


driver =webdriver.Chrome('/usr/local/bin/chromedriver')
driver.execute_script("window.open('http://www.msn.com');")
driver.execute_script("window.open('http://www.cnn.com');")
driver.execute_script("window.open('http://www.yahoo.com');")
driver.execute_script("window.open('https://www.apple.com');")
driver.execute_script("window.open('https://www.google.com');")
driver.execute_script("window.open('https://www.stackoverflow.com');")

# driver.quit()

当我跑步时,我得到了

enter image description here

我现在拥有的是最快的方式吗?

我曾经有过这个

# -*- coding: utf-8 -*-

import os
import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver =webdriver.Chrome('/usr/local/bin/chromedriver')

#1
driver.get("http://msn.com")

#2
driver.find_element_by_tag_name('body').send_keys(Keys.COMMAND + 't')
driver.switch_to.window(driver.window_handles[-1])
driver.get("http://cnn.com")

#3
driver.find_element_by_tag_name('body').send_keys(Keys.COMMAND + 't')
driver.switch_to.window(driver.window_handles[-1])
driver.get("http://www.yahoo.com")

#4
driver.find_element_by_tag_name('body').send_keys(Keys.COMMAND + 't')
driver.switch_to.window(driver.window_handles[-1])
driver.get("https://www.apple.com")

#5
driver.find_element_by_tag_name('body').send_keys(Keys.COMMAND + 't')
driver.switch_to.window(driver.window_handles[-1])
driver.get("https://www.google.com")

#6
driver.find_element_by_tag_name('body').send_keys(Keys.COMMAND + 't')
driver.switch_to.window(driver.window_handles[-1])
driver.get("https://www.stackoverflow.com")

它有效,但很痛苦slow

我现在从6开始,但我想加载100个标签。

另外,我如何摆脱我的第一个怪异的标签? 我甚至可以肯定它为什么存在。

2 个答案:

答案 0 :(得分:1)

升级MAC上的chromedriver(> 2.25)/ chrome浏览器(> 55.0)以删除空数据;标签。 您可以使用threadingmultiprocessing加快流程。

from multiprocessing import Process
import os
import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver =webdriver.Chrome('/usr/local/bin/chromedriver')
driver.get("http://msn.com")
def func1():
  print 'launching: MSN'
 driver.execute_script("window.open('http://www.msn.com');")

def func2():
  print 'launching: CNN'
  driver.execute_script("window.open('http://www.cnn.com');")

if __name__ == '__main__':
  p1 = Process(target=func1)
  p1.start()
  p2 = Process(target=func2)
  p2.start()
  p1.join()
  p2.join()

def runInParallel(*fns):
  proc = []
  for fn in fns:
    p = Process(target=fn)
    p.start()
    proc.append(p)
  for p in proc:
    p.join()

runInParallel(func1, func2)

根据您拥有的CPU数量,计算机的负载,计算机中发生的许多事情的时间安排将影响线程/进程启动的时间。此外,由于流程是在创建后立即启动的,因此创建流程的开销也必须按您看到的时差计算。

答案 1 :(得分:1)

因此,我们已经有两种方法可以使用 New TAB 打开 Selenium

您之前使用 send_keys(Keys.COMMAND + 't') 的方法必然会消耗更多时间,因为我们 switch_to.window() get("http://www.url.com") 也是。因此速度较慢。

execute_script 的当前方法肯定会更快,因为我们只是注入 Java Scripts 来打开新的 {{1 TAB s。

现在,您看到 URL 的原因是因为您通过以下方式初始化了浏览器:

Blank Window

在此之后,我们尚未调用 driver =webdriver.Chrome('/usr/local/bin/chromedriver') 方法打开任何 get() 。相反,我们直接借助 URL 来打开 JavascriptExecutor 。因此,第一个 NEW TAB 仍未使用。

更新:

要将TAB带入游戏,我们可以通过第一个unused TAB调用URL方法访问TAB中的第一个,如下所示:

get()

摘要:

要打开 driver =webdriver.Chrome('/usr/local/bin/chromedriver') driver.get("http://www.msn.com") driver.execute_script("window.open('http://www.cnn.com');") driver.execute_script("window.open('http://www.yahoo.com');") driver.execute_script("window.open('https://www.apple.com');") driver.execute_script("window.open('https://www.google.com');") driver.execute_script("window.open('https://www.stackoverflow.com');") ,您可以使用以下代码行:

New Blank TAB

要打开 driver.execute_script("window.open('','_blank');"); ,您可以使用以下代码行:

New TAB with url