Python Selenium保持浏览器打开

Rom*_*man 5 python selenium

出于营销原因,我正在使用硒打开一些浏览器窗口。我只是打开我的营销渠道,通过硒登录并开始工作。

问题是,在执行代码后,硒将关闭窗口。

到目前为止,所有解决方案都没有帮助。

我有13个浏览器窗口atm。,如下所示:

def open_instagram():    
    try:
        # Connect
        chrome_options = webdriver.ChromeOptions()
        chrome_options.add_argument("--incognito")
        browser = webdriver.Chrome('drivers/chromedriver.exe', chrome_options=chrome_options)
        browser.set_window_size(1800, 900)
        browser.get("https://www.instagram.com/accounts/login/?hl=de")
        browser.find_element(By.NAME, 'username').send_keys('MYEMAIL', Keys.TAB, 'MYPW', Keys.ENTER)
    except Exception as e:
        print (e, 'Instagram')

open_instagram()
Run Code Online (Sandbox Code Playgroud)

我找到的最接近的解决方案是在脚本的末尾添加此内容,但是不知何故,它只会保持5个窗口打开,而不是关闭5个窗口并打开接下来的5个新窗口:

while True:
    pass
Run Code Online (Sandbox Code Playgroud)

我只希望硒使所有浏览器窗口保持打开状态,直到我手动关闭它们为止。

小智 12

如果您希望chrome和chromedriver保持打开状态,则在启动chromedriver时必须使用“ detach”选项。

在您的情况下,请添加:

from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
Run Code Online (Sandbox Code Playgroud)

或者,您也可以在调试模式下以结尾处的断点运行代码,并在断点“终止”程序时暂停它,并在需要时接管浏览器,但这仅在IDE中有效。

编辑-为清楚起见添加了导入

  • `("detach", True)` 选项仅适用于终端。在 VSCode 中调试时不起作用 (3认同)
  • 是否可以重用该浏览器窗口?例如,获取 PID 或其他内容并明确使用(如果存在)? (2认同)
  • 要在 Python 中排除“enable-automation”(隐藏“Chrome 正在由自动化软件横幅控制”横幅,并且可能执行其他操作,但实际上不会禁用自动化),请使用 chromeOptions.add_experimental_option("excludeSwitches", [ “启用自动化”])` (2认同)
  • 'chrome_options' 已弃用,请使用 'options' 代替,如下所示: `browser = webdriver.Chrome('drivers/chromedriver.exe', options=chrome_options)` (2认同)

Jos*_*eia 8

您还可以global browser像这样添加:

def open_instagram():    
    try:
        # Connect
        chrome_options = webdriver.ChromeOptions()
        chrome_options.add_argument("--incognito")
        global browser # this will prevent the browser variable from being garbage collected
        browser = webdriver.Chrome('drivers/chromedriver.exe', chrome_options=chrome_options)
        browser.set_window_size(1800, 900)
        browser.get("https://www.instagram.com/accounts/login/?hl=de")
        browser.find_element(By.NAME, 'username').send_keys('MYEMAIL', Keys.TAB, 'MYPW', Keys.ENTER)
    except Exception as e:
        print (e, 'Instagram')

open_instagram()
Run Code Online (Sandbox Code Playgroud)

来源