selenium详解
setTimeout(function(){debugger},5000)冻结悬停的按钮下拉元素
ctl+shift+c 直接选取该元素
from selenium import webdriver
import time
#创建一个浏览器
driver = webdriver.Chrome()
#浏览器最大化
driver.maximize_window()
# #最小化浏览器
# driver.minimize_window()
# #打开指定的网页(URL就是指网址)
driver.get("http://www.baidu.com")
#定位内容文本框
textElement = driver.find_element_by_id("kw")
#输入内容
textElement.send_keys("五洲 赵静")
#定位 百度一下 按钮
buttonElement = driver.find_element_by_id('su')
#点击
buttonElement.click()
获取输入框的值
元素文本的值
from selenium import webdriver
import time
#创建一个浏览器
driver = webdriver.Chrome()
#浏览器最大化
driver.maximize_window()
# #最小化浏览器
# driver.minimize_window()
# #打开指定的网页(URL就是指网址)
driver.get("http://www.baidu.com")
# #定位内容文本框
# textElement = driver.find_element_by_id("kw")
# #输入内容
# textElement.send_keys("五洲 赵静")
#选择 输入框 然后获取输入框 的name 属性的值
# name = driver.find_element_by_id("kw").get_attribute("class")
# print(name)
#判断元素是否可见 返回的是 T 或者 F
tf = driver.find_element_by_id("kw").is_displayed()
print(tf)
# #定位 百度一下 按钮
# buttonElement = driver.find_element_by_id('su')
# #点击
# buttonElement.click()
#text获取元素的文本内容
# driver.find_element_by_id("s-bottom-layer-right").text
# <input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">
#关闭浏览器
driver.quit()
元素定位显示等待隐式等待,鼠标操作
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
#打开浏览器
driver = webdriver.Firefox()
#等待页面加载,操作10s报出异常
driver.implicitly_wait(10)
driver.maximize_window()
#打开网址
driver.get("http://www.baidu.com")
#定位 设置 按钮
# st = driver.find_element_by_id("s-usersetting-top")
#ActionChains中需要指定要操作的driver,move_to_element后面要写让在那个元素上悬停,而perform()可以看成是提交这次操作
# ActionChains(driver).move_to_element(st).perform()
#在搜索框设置鼠标右键操作
# sd = driver.find_element_by_id("kw")
# ActionChains(driver).context_click(sd).perform()
#拖动
# baidu = driver.find_element_by_xpath('//ul[@id="hotsearch-content-wrapper"]/li[1]')
# ActionChains(driver).drag_and_drop(baidu, sd).perform()
#鼠标 双击 操作
driver.find_element_by_id('kw').send_keys("马大师")
# 双击 百度一下 按钮
baudubutto = driver.find_element_by_id('su')
ActionChains(driver).double_click(baudubutto).perform()
键盘操作
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.maximize_window()
#打开网页
driver.get("http://www.baidu.com")
#定位输入框 输入内容
driver.find_element_by_id("kw").send_keys("美团外卖")
time.sleep(3)
#删除多输入的 数字2
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
# 空格Keys.SPACE
# driver.find_element_by_id("kw").send_keys(Keys.SPACE)
# driver.find_element_by_id("kw").send_keys("接新单了")
# #全选
# driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'a')
#
# #剪切
# driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'x')
# time.sleep(2)
#
# #粘贴
# driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'v')
#
# #回车操作
# driver.find_element_by_id("kw").send_keys(Keys.ENTER)
显示等待
#元素等待:显示等待 隐式等待
#显示等待是等待加载页面上的单个元素,显示等待一般应用在界面查询内容比较多,加载时间特别长的时间
#隐式等待是等整个页面全部加载完成 implicitly_wait(10)
from selenium import webdriver
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.Firefox()
#等待页面加载,操作10s报出异常
driver.implicitly_wait(10) #隐式等待
driver.maximize_window()
driver.get("http://www.baidu.com")
#显示等待:driver 代表的是浏览器对象,10代表的时候最大超时时间,超过10s就报错,0.5s指定的是步长默认就是0.5 可以不写,
#(By.ID, 'kw') 元素定位的方式和内容,要写在一个元组中传递给presence_of_element_located
a = WebDriverWait(driver, 10, 0.5).until(EC.presence_of_element_located((By.ID, 'kw')))
a.send_keys('王二麻子')
切换句柄
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get("https://www.jd.com/")
#获取当前窗口的句柄 句柄就像窗口的身份证一样可以唯一的标识我们的窗口
jdhandle = driver.current_window_handle
#点击 酒店
driver.find_element_by_css_selector('ul[class="J_tab_head service_list"] a[href="//hotel.jd.com/"]').click()
#获取当前浏览器所有的窗口句柄 窗口句柄存放在列表中
winhands = driver.window_handles
print(winhands)
#方法一:在点击酒店后会产生两个窗口,我们和刚开始打开的窗口句柄判断,如果不相等则是刚打开的窗口
# #切换句柄
# for one in winhands:
# if one == jdhandle:
# continue
# else:
# #切换到新打开的窗口句柄
# driver.switch_to.window(one)
# #进入酒店选择界面 输入城市
# driver.find_element_by_id('city').clear()
# driver.find_element_by_id('city').send_keys("西安")
# #点击
# driver.find_element_by_xpath('//ul[@class="suggest-ul"]/li[1]').click()
#
# time.sleep(3)
# #点击 搜索酒店 按钮
# driver.find_element_by_id("searchBtn").click()
#方法二:获取所有的窗口的句柄是存在列表中,列表中的最后一个元素就是新打开的窗口的句柄
driver.switch_to.window(winhands[-1])
#进入酒店选择界面 输入城市
driver.find_element_by_id('city').clear()
driver.find_element_by_id('city').send_keys("西安")
#点击
driver.find_element_by_xpath('//ul[@class="suggest-ul"]/li[1]').click()
time.sleep(3)
#点击 搜索酒店 按钮
driver.find_element_by_id("searchBtn").click()
断言模块加酒店案列
#京东商城 练习 按照条件筛选获取所有的酒店 名字
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
##断言模块EC
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get("https://www.jd.com/")
#获取当前窗口的句柄 句柄就像窗口的身份证一样可以唯一的标识我们的窗口
jdhandle = driver.current_window_handle
#点击 酒店
driver.find_element_by_css_selector('ul[class="J_tab_head service_list"] a[href="//hotel.jd.com/"]').click()
#获取当前浏览器所有的窗口句柄 窗口句柄存放在列表中
winhands = driver.window_handles
#方法二:获取所有的窗口的句柄是存在列表中,列表中的最后一个元素就是新打开的窗口的句柄
driver.switch_to.window(winhands[-1])
#关闭广告: 这个地方设置显示等待的原因为让页面元素完成加载
element_locat = WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'i[class="close"]')))
element_locat.click()
#进入酒店选择界面 输入城市
driver.find_element_by_id('city').clear()
driver.find_element_by_id('city').send_keys("西安")
#点击
driver.find_element_by_xpath('//ul[@class="suggest-ul"]/li[1]').click()
#选择入住 时间
driver.find_element_by_id('dateStart').click()
driver.find_element_by_xpath('//div[@class="ui-jm-calendar ui-calendar-3"]/div[2]//tbody/tr[5]/td[5]').click()
#离店日期
driver.find_element_by_xpath('//div[@class="ui-jm-calendar ui-calendar-4"]/div[2]//tbody/tr[1]/td[4]').click()
#选择 商圈
driver.find_element_by_id('hotelKeys').send_keys("钟楼")
#点击 选择
driver.find_element_by_xpath('//body/div[@class="suggest"][2]//li[2]').click()
#点击 搜索酒店 按钮
driver.find_element_by_id("searchBtn").click()
#driver浏览器对象, 20s 最大超时时间, 0.5 间隔步长 () 设置显示等待 判断页面是否加载完成,这个元素找到了再去获取页面信息
WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located((By.CSS_SELECTOR, '.total')))
#获取酒店名字
titename = driver.find_elements_by_css_selector('.p-name')
for one in titename:
print(one.text)