如何使用Selenium在Mac上打开、关闭选项卡和退出Firefox?

3
我一直在寻找答案,但是我无法让我的代码工作。我希望的是能够打开一个标签页,打开一个新的网页,然后关闭该标签页。在完成我的工作后,我希望程序退出。目前,它无法打开一个新的标签页,关闭新的标签页并退出程序。现在它做的是,它打开谷歌,然后在同一个标签页中加载stackoverflow。
目前,我的代码是...
driver = webdriver.Firefox()
driver.get("https://www.google.com")
time.sleep(5)
driver.find_element_by_tag_name('body').send_keys(Keys.COMMAND + 't')
time.sleep(5)
driver.get("https://www.stackoverflow.com")
time.sleep(5)
driver.find_element_by_tag_name('body').send_keys(Keys.COMMAND + 'w')
time.sleep(5)
driver.Dispose()

有人有任何想法吗?谢谢。

使用迭代器 - https://dev59.com/KqXja4cB1Zd3GeqPNzha#46346324 - undetected Selenium
1个回答

3

尝试以下代码以获得所需结果:

driver = webdriver.Firefox()
driver.get("https://www.google.com")
# Get current window/tab ID
current_window = driver.current_window_handle
# Open StackOverflow in new window/tab
driver.execute_script("window.open('https://www.stackoverflow.com')")
# Get new window/tab ID
new_window = [window for window in driver.window_handles if window != current_window][0]
# Switch to new window/tab
driver.switch_to.window(new_window)
# Close new window/tab
driver.close()
# Switch to initial window/tab
driver.switch_to.window(current_window)
# Quit Webdriver
driver.quit()

谢谢!它起作用了。我只有一个关于这个实现的问题。
  1. 使用driver.execute_script而不是driver.get有什么好处或原因吗?
  2. 对于这行代码:new_window = [window for window in driver.window_handles if window != current_window][0]
    为什么这样可以工作?这只是作为占位符吗?
- Matt I
  1. driver.execute_script("window.open(URL) 允许在新标签页中打开 URL,而 driver.get(URL) 则在同一标签页中打开。
  2. 我不确定我理解你在这种情况下所说的“占位符”的意思... 这行代码允许你从当前可用窗口列表中获取窗口,这与初始窗口不同...
- Andersson
非常感谢澄清。对于#2,我只是指窗口本身作为占位符。因此,currentwindow将成为标签0(谷歌)的占位符,然后new_window将成为标签1(stackoverflow)的占位符。 - Matt I
这是一个窗口的ID。看起来像 'CDwindow-24a4cac9-a500-4cfa-b0b1-fe5490612705' - Andersson
如果问题得到解决,您可以接受答案 - Andersson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接