有时候,使用python+selenium进行登陆后,页面发生跳转,而python仍然停留在原来的页面,无法定位到要找的元素。切换句柄也只是针对各个窗口之间的切换,无法获取到跳转后的页面。
那就换个方法,不去定位要找的元素,直接在当前窗口的基础上使用JS代码再打开一个新窗口,新窗口的网址,就是在登陆后跳转页面显示元素所指向的url,当有多个窗口时,可以使用句柄的方式切换页面。这里所用的思想就是,登陆过后,你进行各个页面访问都是合法的,具体代码如下:
#_*_ coding:utf-8 _*_
import time from selenium import webdriver from selenium.webdriver.common.keys
import Keys
#定义好登陆使用的用户名与密码
username = 'xxxxx'
password='xxxxxx'
#定义操作火狐浏览器geckodriver.exe的驱动的路径,使用前一定要将火狐浏览器的安装路径与geckodriver.exe驱动的路径加入环境变量当中
executable_path = "D:\python\Tools\geckodriver.exe"
#打开浏览器
browser = webdriver.Firefox()
#打开要登陆的页面
browser.get('xxx')
#让页面停顿3秒,防止页面未加载完定位不到元素
time.sleep(3)
#定位到页面输入用户名的地方
username_input = browser.find_element_by_id('textUsername')
#输入用户名
username_input.send_keys(username)
#定位到页面输入密码的地方
password_input = browser.find_element_by_id('textPassword')
#输入密码
password_input.send_keys(password)
#回车登陆
password_input.send_keys(Keys.RETURN)
#js打开新窗口的代码,其中的网址就是你想访问的页面url
js='window.open("xxx");'
#执行js代码打开新窗口
browser.execute_script(js)
#列举当前所有窗口的句柄,句柄应该就相当于标识各个窗口的id
handles = browser.window_handles
#让页面停顿3秒,防止页面未加载完定位不到元素
time.sleep(3)
#可以先将所有的句柄以及当前页面的句柄打印出来,切换到你想要的句柄
browser.switch_to_window(handles[1])