from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import Select from selenium.webdriver.common.action_chains import ActionChains import time # 加上参数 禁止chromedriver日志写屏 options = webdriver.ChromeOptions() options.add_experimental_option("excludeSwitches", ["enable-logging"]) # 创建webdriver对象,指明使用chrome浏览器驱动 wd = webdriver.Chrome(service=Service(r'/Users/llm/Desktop/chromedriver_mac_arm64/chromedriver'), options=options) # 设置隐式等待 wd.implicitly_wait(10) wd.get("https://login.fei.com") """ 根据id选择元素,返回的是该元素对应的webElement对象 find_element会返回符合条件的第一个元素,没有符合条件的会报异常NoSuchElementException """ element = wd.find_element(By.ID, 'rc-tabs-0-tab-password') element.click() element2 = wd.find_element(By.NAME, 'tel') element2.send_keys("1868127") element2.clear() # 清除输入框已有的字符 # get_attribute 可以用来获取元素的属性值, 下面是获取元素class属性的值 print(element2.get_attribute("class")) """ 获取html文本内容 """ # 获取整个元素这一段的html文本内容 print(element2.get_attribute("outerHTML")) # 获取元素内部的html文本内容 # print(element2.get_attribute("innerHTML")) # 注意!输入框中的内容是不能通过element.text方式获取的,而是 获取元素的value属性 print(element2.get_attribute("value")) element3 = wd.find_element(By.NAME, "current-password") element3.send_keys("qwerty123") element4 = wd.find_element(By.CLASS_NAME, "ant-checkbox-input") element4.click() element5 = wd.find_element(By.CLASS_NAME, "index_loginBtn__njGPI") element5.click() wd.find_element(By.CSS_SELECTOR, ".login-choose-school-role-item:nth-child(1)").click() wd.find_element(By.CSS_SELECTOR, ".btn-primary").click() wd.find_element(By.CLASS_NAME, "title_QeISv").click() main_window = wd.current_window_handle """ 寻找handle的一种方法 """ # for handle in wd.window_handles: # wd.switch_to.window(handle) # # if "Bing" in wd.title: # break # 切换窗口句柄 wd.switch_to.window(wd.window_handles[1]) wd.find_element(By.CSS_SELECTOR, "div[class='card-container_1XUHw'] > div").click() wd.switch_to.window(main_window) wd.quit()
""" 根据classname选择一系列元素,find_elements返回的是一个列表,没有符合条件的会返回空列表 """ # # 里面都是class属性值为animal的元素对应的webElement对象 # elements = wd.find_elements(By.CLASS_NAME, "animal") # # 获取元素列表中每个元素的text属性 # for element in elements: # print(element.text) """ 补充: 有时通过text获取文本内容获取不到,原因是:元素的文本内容没有展示在界面上或者没有完全展示在界面上。 可以使用以下两种方法 """ # print(element.get_attribute("innerText")) # print(element.get_attribute("textContent")) """ 根据标签名选择元素,找出所有标签名为div的元素 """ # elements = wd.find_elements(By.TAG_NAME, "div") """ webElement对象也可以使用 find_element 和 find_elements 方法 WebDriver 对象选择元素的范围是整个页面, WebElement对象选择元素的范围是元素内部 """ # element = wd.find_element(By.ID, "container") # elements = element.find_elements(By.TAG_NAME, "span") # for e in elements: # print(e.text) """ 隐式等待原理:元素没有找到的时候,selenium并不立即返回错误,而是每隔半秒重新寻找 1. 直到找到该元素 2. 或者超出最大等待时长,这才抛出异常(如果是 find_elements 之类的方法会返回空列表) """ # 设置最大等待时间 10, 后续所有的find_element 、find_elements之类的方法都会采用此策略 # 一般放在wd创建后设置 # wd.implicitly_wait(10) # while True: # try: # element = wd.find_element(By.ID, '1') # print(element.text) # break # except: # time.sleep(1) """ 切换frame,1. 传入frame的name或者id 2. 也可以传入一个frame的element对象 """ wd.switch_to.frame("frame1") wd.switch_to.frame(wd.find_element(By.CSS_SELECTOR, "frame[src=''sample1.html]")) # 切换回最外层frame wd.switch_to.default_content() """ select单选框 """ # select = Select(wd.find_element(By.ID, "ss_single")) # select.select_by_visible_text("苹果") # select.select_by_index("1") # select.select_by_value("苹果") """ select多选框 """ # select.deselect_all() # select.select_by_visible_text("苹果") # select.select_by_value("橘子") # select.deselect_by_value("橘子") """ 鼠标移动到元素上 """ # ac = ActionChains(wd) # ac.move_to_element(wd.find_element(By.CSS_SELECTOR, "[name='tj_briicon']")).perform() """ 冻结页面, 在浏览器console中输入下面这行代码:表示在5000毫秒之后,执行debugger命令 """ # setTimeout(function(){debugger}, 5000) """ 浏览器弹框处理。 注意:有些弹框并非浏览器弹框,而是html元素,这种使用上面的元素选择方式进行处理即可 """ alert = wd.switch_to.alert # 获取弹出框中的文本 print(alert.text) # 输入文本 alert.send_keys("111") # 点击确定按钮 alert.accept() # 点击取消按钮 alert.dismiss() # webElement使用xpath时的一个坑!!需要注意: # 先寻找id为china的元素,然后再从此元素内部寻找所有的p元素。 # 此时注意 //p 前面一定要加 . , 才表示从webelement内部寻找。 否则还是寻找的webdriver整体的 china = wd.find_element(By.ID, "china") p_elements = china.find_elements(By.XPATH, ".//p")
标签:wd,简单,selenium,element,elements,使用,元素,find,select From: https://www.cnblogs.com/mlllily/p/17280765.html