有時,使用selenium 定位頁面元素時,瀏覽器明明打開的是須要定位的頁面,但就是定位不到元素。打印一下元素page_source,會發現源碼與頁面不一樣。html
主要問題是頁面沒有加載完成致使,須要設置一個等待時間。因此正常狀況下,只要click()點擊後有頁面跳轉,在driver.switch_to.window(driver.window_handles[0])web
切換到新頁面前,最好設置一下等待時間。防止獲取不到元素chrome
切換到最新窗口:windows
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('//*[@id="app"]/div[6]/div[2]/span[2]').click() #切換產品分類
time.sleep(2)
driver.find_element_by_xpath('//*[@id="app"]/div[7]/section[1]/a/div[3]').click() #進入產品詳情頁面
#print(driver.page_source)
driver.find_element_by_xpath('//*[@id="buyBtn"]').click() #點擊訂購
driver.find_element_by_xpath('/html/body/div[10]/p[3]').click() #點擊登陸按鈕
time.sleep(2)
n=driver.window_handles #獲取當前頁面全部的句柄
driver.switch_to.window(n[0]) #切換至最前面的頁面
driver.find_element_by_xpath('/html/body/div[8]/div[5]').click() #選擇密碼登陸
time.sleep(1)
driver.switch_to.window(n[0])
driver.find_element_by_id('phoneNumber').send_keys(account)
driver.find_element_by_id('pwd').send_keys(passwd)
driver.find_element_by_xpath('//*[@id="btnLoginPassword"]/p').click() #點擊登陸按鈕
time.sleep(2)
driver.switch_to.window(n[0]) #切換至最新的頁面
switch=0
for i in list_phone:
phones = i
if switch == 0:
print(i)
driver.find_element_by_xpath('//*[@id="phoneNumber"]').clear()
driver.find_element_by_xpath('//*[@id="phoneNumber"]').send_keys(i)
driver.find_element_by_xpath('//*[@id="buyBtn"]').click() #生成訂單
new_windows = driver.switch_to.alert #切換至alert彈窗上
print(new_windows.text) #獲取彈窗上的文本
time.sleep(600)
new_windows.accept() #點擊確認按鈕
switch =1
time.sleep(6)
elif switch == 1:
print(i)
element = driver.find_element_by_id('phone') # 找到元素
driver.find_element_by_id('phone').send_keys('13143683776') # 輸入號碼
driver.execute_script("arguments[0].scrollIntoView(true);", element) # 把輸入框拉倒頂端
driver.find_element_by_xpath('//*[@id="app"]/div[6]/div[2]/span[2]').click() # 切換產品分類
time.sleep(2)
driver.find_element_by_xpath('//*[@id="app"]/div[7]/section[1]/a/div[3]').click() # 進入產品詳情頁面
driver.find_element_by_xpath('//*[@id="phoneNumber"]').clear()
driver.find_element_by_xpath('//*[@id="phoneNumber"]').send_keys(i)
driver.find_element_by_xpath('//*[@id="buyBtn"]').click() #生成訂單
new_windows = driver.switch_to.alert #切換至alert彈窗上
print(new_windows.text) #獲取彈窗上的文本
new_windows.accept() #點擊確認按鈕
time.sleep(6)
# driver.quit() #關閉瀏覽器
# driver.close() #關閉遊標
執行結果:
登陸成功
生成訂單:瀏覽器
執行打印日誌