google - selenium chromedriver python tutorial



Qual é o caminho mais rápido para abrir urls em novas abas via Selenium-Python? (2)

Eu quero criar um script python para abrir muitas abas

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()

Quando eu corro eu recebo

O que eu tenho agora é o caminho mais rápido?

Eu costumava ter isso

# -*- 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")

Funciona, mas é dolorosamente slow .

Eu começo com 6 agora, mas eu quero carregar 100 abas.

Além disso, como faço para me livrar da minha primeira aba estranha? Eu tenho certeza do porque está lá.


Atualize o navegador chromedriver (> 2.25) / chrome (> 55.0) no seu MAC para remover os dados vazios; aba. Você pode usar o threading ou o multiprocessing para acelerar o processo.

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)

Dependendo de quantos CPUs você possui, a carga da máquina, o tempo de muitas coisas que acontecem no computador terão uma influência no tempo de início dos processos / threads. Além disso, como os processos são iniciados logo após a criação, a sobrecarga de criação de um processo também deve ser calculada na diferença de tempo que você vê.


Portanto, já temos duas abordagens disponíveis para abrir o New TAB com o Selenium .

Sua abordagem anterior com send_keys(Keys.COMMAND + 't') está destinada a consumir mais tempo à medida que switch_to.window() e get("http://www.url.com") também. Por isso, mais devagar.

Sua abordagem atual com execute_script está fadada a ser mais rápida, já que estamos simplesmente injetando Java Scripts para abrir novas TAB com URL s.

Agora, a razão pela qual você vê uma Blank Window é porque assim que inicializou o navegador:

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

Depois disso, não invocamos o método get() para abrir qualquer URL . Em vez disso, temos a ajuda do JavascriptExecutor para abrir NEW TAB s. Por isso, o primeiro TAB permanece sem uso.

Atualização:

Para trazer o unused TAB para o jogo, podemos acessar o primeiro dos URL s através do primeiro método chavando get() seguinte maneira:

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..com');")

Resumo:

Para abrir uma New Blank TAB você pode usar a seguinte linha de código:

driver.execute_script("window.open('','_blank');");

Para abrir um New TAB with url você pode usar a seguinte linha de código:

driver.execute_script("window.open('http://facebook.com/');");




selenium-chromedriver