Executar um navegador na janela ativa

0

Eu tenho que almoçar vários navegadores (milhares), mas não quero abrir uma nova janela toda vez que um navegador é iniciado; em vez disso, preciso abrir a página da Web, processar o conteúdo e ir para a próxima.

Ao executar o Chrome (não precisa ser o Chrome) no terminal:

$ google-chrome URL

a página da Web é aberta em uma nova janela do navegador real:

Created new window in existing browser session.

Existe alguma maneira de executá-lo nas janelas reais e não abrir um novo?

Alternativamente: existe uma maneira de matar a sessão do navegador atualmente criada antes de iniciar a próxima? Como obtenho o pid dessa nova sessão criada apenas se o navegador foi inicialmente fechado?

    
por nightcod3r 30.11.2014 / 07:58

2 respostas

1

efetivamente , o que você quer é abrir um novo URL em uma janela sem fechar a janela atual manualmente (se bem entendi), nem ter que fechar as abas manualmente.

Solução básica

A solução poderia ser executar um comando que combina duas coisas:

  1. abre uma nova janela a partir da linha de comando com o url como argumento
  2. fecha automaticamente a janela atual

Dessa forma, o pid do navegador não será alterado e você não precisará fechar manualmente as guias e / ou janelas.

O pequeno script abaixo faz exatamente isso, usando o firefox. O motivo para usar o firefox é que (por exemplo) o chrome tem vários pids por definição, tornando o processo mais complicado.

instalando o wmctrl
O script usa wmctrl para localizar e fechar as janelas atuais do Firefox, você pode ter que instalá-lo primeiro:

sudo apt-get install wmctrl

O script

#!/usr/bin/env python3

import subprocess
import socket
import sys

url =sys.argv[1]

def get_info(command):
    return subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8").strip()

def run_command(command):
    subprocess.call(["/bin/bash", "-c", command])

currpid = get_info("pidof firefox")
browserwindow = [l.split()[0] for l in get_info("wmctrl -l -p").splitlines() if currpid in l]
run_command("firefox -new-window "+url)
for i in browserwindow:
    run_command("wmctrl -ic "+i)

Como usar

Copie o script em um arquivo vazio, salve-o como firejump.py . Abra uma janela do firefox (qualquer endereço, apenas uma janela) e execute o script pelo comando:

python3 /path/to/firejump.py <new_url>

Desativar aviso para fechar a janela atual

Para que o procedimento seja executado sem o aviso irritante do firefox de que você está fechando as guias ou janelas atuais: desative os avisos desmarcando-o nas preferências:

Soluçãomaisavançada

SevocêrealmenteprecisarpularumalistademilharesdeURL,podeserútilestenderoscriptumpouco(consulteoscriptabaixo)edeixá-lopularautomaticamenteparaopróximoURLdeumalistacriadaemumarquivodetextoeexecuteoscriptcomumacombinaçãodeteclasparairparaopróximoURL.

Comousar

  • Copieoscriptabaixoemumtexfilevazio,salve-ocomojump_list.py
  • crienamesmapastaumarquivodetextochamado(exatamente):urls.txt
  • preenchaoarquivocomseusURLs,umporlinha:

    www.something.comwww.another_thing.comwww.yet_another_thing.nlwww.itshardtostop.be

eassimpordiante

AbraumajaneladoFirefox(qualquerendereço,apenasumajanela).
Agora,quandovocêexecutaoscript,ofirefoxabreoprimeirourl.
Execute-onovamenteeeleirápularparaopróximourleassimpordiante,atéqueoúltimoURLdalistatenhapassado.

Explicação

Oscriptlêaslinhasnoarquivourls.txtporíndice.Elemonitoraoíndice(usadoporúltimo)emumarquivoqueoscriptcrianoprópriodiretóriodoscript.Todavezqueoscriptéexecutado,onúmeroéaumentadoemumatéqueaúltimalinhasejaatingida.

Oscript

#!/usr/bin/env python3 import subprocess import os curr_path = os.path.dirname(os.path.abspath(__file__)) def get_info(command): return subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8").strip() def run_command(command): subprocess.call(["/bin/bash", "-c", command]) def write_totrack(file, next_url): with open(file, "wt") as wrt: wrt.write(next_url) def read_file(file): with open(file) as src: return src.read() keep_track = curr_path+"/"+"next_visit.txt" url_list = read_file(curr_path+"/"+"urls.txt").splitlines() if not os.path.exists(keep_track): next_url = "1"; index = 0 write_totrack(keep_track, next_url) else: index = int(read_file(keep_track)) next_url = index+1 write_totrack(keep_track, str(next_url)) if index < len(url_list): curr_url = url_list[index] currpid = get_info("pidof firefox") browserwindow = [l.split()[0] for l in get_info("wmctrl -l -p").splitlines() if currpid in l] run_command("firefox -new-window "+curr_url) for i in browserwindow: run_command("wmctrl -ic "+i) else: pass

Execute o script por:

python3 /path/to/jump_list.py

Adicione a $ PATH

Mais elegante seria salvar o script em ~/bin , torná-lo executável, remover a extensão de idioma e executá-lo pelo comando:

jump_list

Adicionar às teclas de atalho

Para realmente deixá-lo confortável, adicione-o a uma combinação de atalhos: Configurações do sistema > "Teclas de atalho" > "Atalhos personalizados"

    
por Jacob Vlijm 30.11.2014 / 12:38
0

Eu tenho uma ideia para a solução alternativa: você pode verificar com

ps -ef | grep chrome

o número do processo da sessão do Chrome em execução. Com

kill [process number]

você pode matar o processo. Espero que funcione para você.

    
por Erich 30.11.2014 / 09:10