使用Python在Firefox中打开几个选项卡

时间:2014-09-18 19:02:31

标签: python firefox

我花了大约一分钟输入10到15个网站的名称,我通常在早上首先检查Firefox。这是一个相当可观的"浪费我的时间,为什么不自动化这个过程?在Firefox启动时打开每个标签都不是一个好的解决方案(因为我只检查那些页面一次)所以我认为一个小的Python脚本应该可以解决这个问题:

import webbrowser
with open('url_list.txt', 'r') as url_file:
    for url in url_file:
        webbrowser.open(url)

url_list.txt文件只有页面'由换行符分隔的网址。

我遇到的问题是这个脚本的行为取决于我是否已经启动了Firefox。如果Firefox正在运行,列出的URL将按预期在单独的选项卡中打开。如果Firefox没有运行,那么每个URL都会在一个窗口中打开,这会破坏我的工作流程。为什么会这样?

3 个答案:

答案 0 :(得分:1)

webbrowser在后​​台运行的方式包括创建subprocess.Popen个对象。这有两个潜在的影响直接映射到报告的结果:

  • 如果Firefox已打开,因为webbrowser检测到Firefox已在运行,它会将正确的参数发送到Popen,这会导致当前Firefox窗口中的每个URL都打开。

  • 如果不存在Firefox进程,那么会发生多个并发请求,以便Firefox访问传递的URL。由于没有窗口,因此没有办法创建标签,Firefox的最后一个选项是在单独的窗口中显示每个链接。

我设法通过在调用Firefox时加入所有URL来解决这个问题。这有一些限制(参考命令字符串的字符限制),但它是一个非常简单有效的解决方案:

import subprocess
firefox_path = "C:/Program Files/Mozilla Firefox/firefox.exe"
cmdline = [firefox_path]
with open('url_list.txt', 'r') as url_file:
    for url in url_file:
        cmdline.append(url)
subprocess.Popen(cmdline)

答案 1 :(得分:1)

在不对浏览器路径进行硬编码的情况下执行此操作的方法是打开第一个,等待几秒钟,然后打开其余部分:

import webbrowser, time
with open('url_list.txt', 'r') as url_file:
    urls = [line.strip() for line in url_file]
webbrowser.open(urls[0])
time.sleep(4)
for url in urls[1:]:
    webbrowser.open_new_tab(url)

答案 2 :(得分:1)

driver = webdriver.Ie("C:\\geckodriver.exe")
binary = FirefoxBinary('usr/bin/firefox') # Optional
driver = webdriver.Firefox(firefox_binary=binary) # Optional
driver.get("http://www.google.com")
driver.maximize_window()