selenium知识点(二)
页面等待
为什么需要页面等待
1、网页元素需要加载时间
2、有时候一些操作只有在某种条件成熟的情况下才能做
如何处理页面等待的问题?
time.sleep(3)
selenium有自己的等待方式提供了隐式等待和显示等待
代码案例实现
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
"""
#为什么需要页面等待
1、网页元素需要加载时间
2、有时候一些操作只有在某种条件成熟的情况下才能做
#如何处理页面等待的问题?
time.sleep(3)
selenium有自己的等待方式提供了隐式等待和显示等待
"""
driver = webdriver.Chrome()
# driver.get("https://www.baidu.com/")
driver.get("https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc")
# 会把设定时间用完,再进行操作
# time.sleep(10)
# 隐式等待(更快)
# 赋予一个全局等待时间
# driver.implicitly_wait(10)
# 显示等待
# 输入出发地
WebDriverWait(driver, 1000).until(
ec.text_to_be_present_in_element_value((By.ID, 'fromStation'), 'CSQ')
)
# 显示等待
# 输入目的地
WebDriverWait(driver, 1000).until(
ec.text_to_be_present_in_element_value((By.ID, 'toStation'), 'BJP')
)
tic_tag = driver.find_element_by_id('query_ticket')
# execute_script用来执行js代码的
driver.execute_script('arguments[0].click', tic_tag)
tic_tag.click()
操作多窗口
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
time.sleep(2)
# 会直接覆盖网站
# driver.get("https://www.douban.com/")
# 如何同时打开两个网页
driver.execute_script('window.open("https://www.douban.com/")')
time.sleep(2)
driver.execute_script('window.open("https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc")')
time.sleep(2)
# close()关闭当前锁打开网页
# driver.close()
# 通过close()测试 我们发现 关闭的都是第一个打开的网页
# 获取当前操作的url
print(driver.current_url)
# 如果想要切换操作其他页面 需要切换selenium的视角
driver.switch_to.window(driver.window_handles[2])
print(driver.current_url)