web自动化页面三剑客
前提需要熟悉8大定位方式
xpath,id,name,class,css_selector,tag,link_text,partail_link_text
如果出现nosuchelementException,原因如下:
1.id有重复的:换一种定位
2.id动态变化:换一种定位方式
3.网速过慢,而导致页面没渲染出来:time.sleep
4.页面没有最大化,导致隐藏元素。max_window
弹框
# 有时候页面中有浏览器的弹框,比如js中的alert(),这样页面就无法定位该弹框
# 可以使用下面方法
from selenium import webdriver
edge = webdriver.Edge()
edge.switch_to.alert.accept() # 确认键
edge.switch_to.alert.dismiss() # 取消键
框架页
# 有的界面是前端人有各写各的界面,最后整合
# 如 frame 结构
# 这就导致你看到的界面不一定属于当前界面
# 有下面方法可自动化
from selenium import webdriver
edge = webdriver.Edge()
edge.switch_to.frame("info") # 跳到子界面
# 操作
edge.switch_to.default_content() # 跳回原始界面
# frame源代码
# 下面写着frame的三种定位方式
"""
Switches focus to the specified frame, by index, name, or webelement.
:Args:
- frame_reference: The name of the window to switch to, an integer representing the index,
or a webelement that is an (i)frame to switch to.
:Usage:
::
driver.switch_to.frame('frame_name')
driver.switch_to.frame(1)
driver.switch_to.frame(driver.find_elements(By.TAG_NAME, "iframe")[0])
"""
窗口切换
# 有时候会遇到多窗口问题
# 这时候切换,需要掌握以下方法
from selenium import webdriver
edge = webdriver.Edge()
edge.get("https://www.baidu.com")
edge.switch_to.new_window() # 打开一个新的页面
edge.get("https://www.jd.com")
# 默认选项卡在当前页面
print(edge.title) # 京东(JD.COM)-正品低价、品质保障、配送及时、轻松购物!
edge.close()
----------------------------------------------
from selenium import webdriver
edge = webdriver.Edge()
edge.get("https://www.baidu.com")
edge.switch_to.new_window()
edge.get("https://www.jd.com")
# 有几个页面,就有几个选项卡
print(edge.window_handles) #['4A2BE702F6D26FDDA67972E5A63B1D6D', '21F59A0273050513D47CD6CCE2B0829E']
# 切换到第一个选项卡,及第一个页面
edge.switch_to.window(edge.window_handles[0])
print(edge.title) # 百度一下,你就知道
edge.close()
其他问题
如果遇到下拉框选项
from selenium.webdriver.support.select import Select
# 下拉
ele = driver.find_element(By.XPATH,'//*[@id="userType"]')
Select(ele).select_by_index(2) # 选项从0开始
如果遇到复杂操作,如:双击,右键,滑动
# ActionChains: 事件链对象
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("网址")
driver.maximize_window()
# 获取滑块
ele = driver.find_element(By.XPATH,'//*[@id="box"]/div[3]')
ac = ActionChains(driver)
ac.click_and_hold(ele).move_by_offset(300,0).perform()
time.sleep(1)
ac.release() # Releasing a held mouse button on an element.

浙公网安备 33010602011771号