Выполните браузер на активном окне

Я должен накормить несколько браузеров обедом (тысячи), но не хочу открывать новое окно каждый раз, когда браузер запускается; вместо этого, я должен открыть веб-страницу, обработать содержание и перейти к следующему.

Когда рабочий Chrome (это не должен быть Chrome) от терминала:

$ google-chrome URL

веб-страница открыта в новом окне фактического браузера:

Created new window in existing browser session.

Там какой-либо путь состоит в том, чтобы выполнить его на фактических окнах и не открыть новое?

Кроме того: существует ли способ уничтожить в настоящее время создаваемый сеанс браузера прежде, чем запустить следующий? Как я получаю pid той новой сессии, просто созданной, если браузер был первоначально закрыт?

0
задан 29 November 2014 в 23:58

2 ответа

эффективно, то, что Вы хотите, открывает новый URL в окне, не закрывая текущее окно вручную (если я понимаю хорошо), ни имеющий необходимость закрыть вкладки вручную.

Основное решение

Решение могло состоять в том, чтобы выполнить команду, которая комбинирует две вещи:

  1. откройте новое окно из командной строки с URL как аргумент
  2. автоматически закройте текущее окно

Таким образом, pid браузера не изменится, и Вы не должны были бы вручную закрывать вкладки и/или окна.

Маленький сценарий ниже делает точно это, с помощью Firefox. Причина использовать Firefox является этим (например). хром имеет несколько pids по определению, делая процесс более сложным.

установка wmctrl
Сценарий использует wmctrl, чтобы найти и закрыть текущие окна Firefox, Вам, возможно, придется установить его сначала:

sudo apt-get install wmctrl

Сценарий

#!/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)

Как использовать

Скопируйте сценарий в пустой файл, сохраните его как firejump.py. Откройте окно Firefox (любой адрес, просто окно) и запустите скрипт командой:

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

Отключите то, чтобы попросить закрыть текущее окно

Чтобы процедура работала без раздражающего Firefox, предупреждающего, что Вы закрываете текущие вкладки или окна: отключите предупреждения путем удаления галочки у него в предпочтениях:

enter image description here

Больше передового решения

Если действительно необходимо перепрыгнуть через список тысяч URL, могло бы быть полезно расширить сценарий немного (см. сценарий ниже), и позвольте ему автоматически перейти к следующему URL из списка, который Вы создали в текстовом файле и запустили скрипт с сочетанием клавиш для перехода к следующему URL.

Как использовать

  • Скопируйте сценарий ниже в пустой texfile, сохраните его как jump_list.py
  • создайте в той же папке текстовый файл, названный (точно): urls.txt
  • заполните файл своими URL, один на строку:

    www.something.com
    www.another_thing.com
    www.yet_another_thing.nl
    www.itshardtostop.be
    

и так далее

Откройте окно Firefox (любой адрес, просто окно).
Теперь, когда Вы запускаете скрипт, Firefox открывает первый URL.
Выполните его снова, и это перейдет к следующему URL и так далее, пока последний URL списка не передал.

Объяснение

Сценарий читает строки в файле urls.txt индексом. Это отслеживает (в последний раз используемый) индекс в файле, который сценарий создает в собственном каталоге сценария. Каждый раз выполнения сценария, число увеличено одним, пока последняя строка не достигнута.

Сценарий

#!/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

Запустите скрипт:

python3 /path/to/jump_list.py

Добавьте его к $PATH

Более изящный должен был бы сохранить сценарий к ~/bin, сделайте это исполняемым файлом, удалите расширение языка и выполните его командой:

jump_list

Добавьте к сочетаниям клавиш

Для реального создания этого удобным добавьте его к комбинации ярлыка: Параметры настройки системы> "Сочетания клавиш"> "Пользовательские Ярлыки"

1
ответ дан 6 October 2019 в 08:44

У меня есть идея для альтернативного решения: можно свериться

пикосекунда-ef | grep хром

количество процесса рабочей хромовой сессии. С

уничтожают [число процесса]

, можно уничтожить процесс. Надеюсь, что это работает на Вас.

0
ответ дан 6 October 2019 в 08:44

Другие вопросы по тегам:

Похожие вопросы: