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.

posted @ 2023-12-19 14:43  Bre-eZe  阅读(32)  评论(0)    收藏  举报