from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
# from selenium.webdriver.chrome.webdriver import WebDriver
# web = WebDriver(executable_path='chromedriver')
# 创建一个浏览器对象
driver = webdriver.Chrome()
driver.implicitly_wait(10) # 隐式等待 只针对定位操作,参数为最大等待时间
# 访问指定的url
driver.get('https://account.cnblogs.com/signin?returnUrl=https:%2F%2Fwww.cnblogs.com%2F')
# web.find_elements_by_id('kw').send_keys('selenium')
# web.find_elements_by_id('su').click()
# frame/iframe 操作
# 切换到iframe中
driver.switch_to.frame('xx') # xx为iframe或frame的id/class
# 切换到iframe外层
driver.switch_to.default_content()
# 切换到新窗口
# mainWindow变量保存当前窗口的句柄
mainWindow = driver.current_window_handle
# driver.switch_to.window()
for handle in driver.window_handles:
# 先切换到该窗口
driver.switch_to.window(handle)
# 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口
if 'Bing' in driver.title:
# 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,
break
# 通过前面保存的老窗口的句柄,自己切换到老窗口
driver.switch_to.window(mainWindow)
# driver.find_element(By.ID, 'mat-input-0').send_keys('519755117@qq.com')
# driver.find_element(By.ID, 'mat-input-1').send_keys('FTFX1236')
# 查找需要操作的元素,对元素进行输入操作 上海
we1 = driver.find_element(By.ID, 'mat-input-0')
we3 = driver.find_element(By.CSS_SELECTOR, '.plant') # .xx 表示根据属性选择 #xx 表示根据id选择
# .clear() 清除之前输入的文字
we1.clear()
we1.send_keys('519755117@qq.com')
we2 = driver.find_element(By.ID, 'mat-input-1')
we1.clear()
we2.send_keys('FTFX1236')
# WebElement对象
we1.get_attribute('class') # 通过WebElement对象的 get_attribute 方法来获取元素的属性值
we1.get_attribute('outerHTML') # 获取整个元素对应的HTML
we1.get_attribute('value') # 获取input输入框的文本元素
WebDriverWait(driver, 10, 0.5).until(lambda method1: driver.find_element(By.CLASS_NAME, 'mat-button-wrapper'),
message='时间超时') # 显示等待
# 执行操作,点击
web = driver.find_element(By.CLASS_NAME, 'mat-button-wrapper')
web.click()
# 关闭这个webdriver的进程
# sleep(10)
driver.quit()