使用selenium打开新标签页,从网上搜索的方法windows下只有使用js可以使用
js = 'window.open("https://www.baidu.com");'
driver.execute_script(js)
使ctrl+t手动操作是可以打开一个新标签页,但是代码执行时无效
可以使用back方法返回原界面
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 't')#并没有打开新标签页
driver.get('http://mm.taobao.com/')#原来界面覆盖
driver.back()
ActionChains(driver).key_down(Keys.CONTROL).send_keys("t").key_up(Keys.CONTROL).perform()#实际测试无反应
上述使用js的方法打开新窗口,在增加了设置下载路径代码后,就不可用了,仍然是两个窗口打开,但是捕获到的handler是两个
可以进行切换,只是没有切换动态效果了,实际是切换了的
profile = webdriver.FirefoxProfile()
# profile.set_preference("browser.link.open_newwindow", 3)设置新窗口打开,无效
# profile.set_preference("browser.link.open_newwindow.restriction",0)
profile.set_preference('browser.download.dir', cert_path),设置下载路径
profile.set_preference('browser.download.folderList', 2)
self.driver = webdriver.Firefox(firefox_profile=profile)
原因:(引用明明慢的简书)
用标签页代替弹出窗口无法设置成功**
- 在python使用selenium来操控firefox的时候,有时候希望所有的新开窗口用TabPage来代替,但是如果你以为通过设置firefox的profile文件目录,或者在代码中通过
profile1.set_preference('browser.link.open_newwindow',3)
来搞定,那么你会发现你启动的窗口永远browser.link.open_newwindow
的值永远等于2,也就是下图中的“需要新建窗口时以新建标签页代替”选项永远是没有选中的,除非手动点击一下
- 因为selenium的绑定中已经将这个选项写成了固定值,所以无论你如何设定除非在窗口启动后手动点击,否则该项用户按不会选中。而该问题的解决在于直接手动改写selenium代码中的设置,具体方法如下:
- 确定目录,在我的机器上是
C:\Python27\Lib\site-packages\selenium\webdriver\firefox
,大家可以根据自己的机器情况进行调整 - 编辑器打开目录中的
webdriver_prefs.json
文件,将browser.link.open_newwindow
的值修改为3。
在firefox中,如果通过Tab page方式打开了多个页面,这时使用driver.window_handles
来获得窗口句柄,你会发现永远都只有一个handle,完全无法通过driver.switch_to_window(handle)
来切换Tab页面
- 雷人的原因:在firefox中,除非你用的是开发版,否则Tab page是无法获得窗口句柄的,也就是虽然在firefox中打开了多个Tab Page,但是通过
driver.window_handles
获得的句柄永远是1.而同样,如果是在chrome中,将可以获得多个句柄。 - 解决方案 自己通过发送快捷键进行Tab 页面切换吧。
作者:明慢慢
链接:https://www.jianshu.com/p/d8b5cb20ea66
我的解决方法:既然selenium进行了设置,不让修改browser.link.open_newwindow,那么我就使用selenium模拟手动勾选
打开链接在新标签页而非新窗口(W)这个选项,get方法访问以前增加以下代码即可
# 勾选火狐浏览器打开链接在新标签页而非新窗口(W)
driver.get("about:preferences")#进入选项页面
driver.find_element(By.ID, "linkTargeting").click()