有时,使用selenium 定位页面元素时,浏览器明明打开的是需要定位的页面,但就是定位不到元素。打印一下元素page_source,会发现源码与页面不同。
主要问题是页面没有加载完成导致,需要设置一个等待时间。所以正常情况下,只要click()点击后有页面跳转,在driver.switch_to.window(driver.window_handles[0])
切换到新页面前,最好设置一下等待时间。防止获取不到元素
切换到最新窗口:
n=driver.window_handles #获取当前页面所有的句柄
driver.switch_to.window(n[0]) #切换至最前面的页面
脚本示例:
#特别注意,有点击操作后,driver.click()后最好停顿2S左右加载后,再切换至最新页面
from selenium import webdriver
from conf import *
import time
driver=webdriver.Chrome(executable_path = "E:\seleniumbrowserdriver\chromedriver\chromedriver")
driver.get("https://192.168.81.176:8080/***/***/pay/homeIndex")
driver.maximize_window() #窗口最大化
time.sleep(2)
element=driver.find_element_by_id('phone') #根据ID找到元素
driver.find_element_by_id('phone').send_keys('131*****776') #输入号码
driver.execute_script("arguments[0].scrollIntoView(true);", element) #把输入框拉倒顶端
driver.find_element_by_xpath('//*[@> # driver.close() #关闭游标
执行结果:
登录成功
![driver.switch_to.window(driver.window_handles[0])切换到最新打开窗口 driver.switch_to.window(driver.window_handles[0])切换到最新打开窗口](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9YUhSMGNITTZMeTlwYldjeU1ERTRMbU51WW14dlozTXVZMjl0TDJrdFltVjBZUzh4TlRNd05USTRMekl3TVRreE1TOHhOVE13TlRJNExUSXdNVGt4TVRBMU1UVXhNalE0T1RjeExUWTFORGs0TlRnek5DNXdibWM9)
生成订单:
![driver.switch_to.window(driver.window_handles[0])切换到最新打开窗口 driver.switch_to.window(driver.window_handles[0])切换到最新打开窗口](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9YUhSMGNITTZMeTlwYldjeU1ERTRMbU51WW14dlozTXVZMjl0TDJrdFltVjBZUzh4TlRNd05USTRMekl3TVRreE1TOHhOVE13TlRJNExUSXdNVGt4TVRBMU1UVXdPRFV6T0RNekxURTJOekEwTmprek56Z3VjRzVu)
执行打印日志
![driver.switch_to.window(driver.window_handles[0])切换到最新打开窗口 driver.switch_to.window(driver.window_handles[0])切换到最新打开窗口](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9YUhSMGNITTZMeTlwYldjeU1ERTRMbU51WW14dlozTXVZMjl0TDJrdFltVjBZUzh4TlRNd05USTRMekl3TVRreE1TOHhOVE13TlRJNExUSXdNVGt4TVRBMU1UVXhOREU1TnpJNUxURTVPRFk0T0RRd056UXVjRzVu)