Selenium打开新标签页,遇见的bug

使用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代码中的设置,具体方法如下:
  1. 确定目录,在我的机器上是C:\Python27\Lib\site-packages\selenium\webdriver\firefox,大家可以根据自己的机器情况进行调整
  2. 编辑器打开目录中的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()

 

 

 

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值