1、导入selenium自定义的webdriver、后续可通过调用此协议启动各大浏览器
from selenium import webdriver #浏览器
from selenium.webdriver.support.select import Select #下拉框
webdriver原理理解:客户端脚本(java、python、ruby)不能直接与浏览器进行沟通、webdriver在两者之间当作一个翻译官、它可以把客户端的代码翻译成浏览器可以识别的代码比如js传给浏览器、浏览器在把执行的结果返回给webdriver、webdriver把返回的结果做一些封装、一般都是json格式、然后返回给client(客户端)主要是桥梁作用
2、定义要访问的浏览器、以及访问的地址
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
3、浏览器关闭、前进、后退、刷新
driver.close()#关闭当前焦点所在的页面
driver.quit()#完全退出并关闭浏览器
driver.forward()#前进
driver.back()#后退
driver.refresh()#刷新页面后当前页面的数据全部被清空
4、窗口最大化
driver.maximiza_window()
print(driver.get_window_size())#获取当前窗口的大小
5、获取浏览器属性的方法
print(driver.title) # 获取当前的值
print(driver.current_url) # 获取当前的浏览器地址
print(driver.page_source) # 获取页面的源码信息
print(driver.capabilities) # 获取字典类型
6、获取当前窗口的句柄
print(driver.window_handles) #获取当前所有的窗口、返回字符串
driver.switch_to.window(driver.window_handles[-1]) #切换窗口到最后一个页面
driver.switch_to.window(driver.window_handles[0]) #返回到原窗口
7、文本链接?
driver.find_element_by_partial_link_text('新闻').click()
drive.back()
driver.find_element_by_link_text('地图').click()
8、获取页面元素的基本信息======
9、判断页面元素是否可见is_displayed1 = (driver.find_element_by_partial_link_text('地图').is_displayed())
print("返回布尔值:", is_displayed1)
10、判断页面元素是否可操作is_displayed1 = (driver.find_element_by_partial_link_text('地图').is_enabled())
print("返回布尔值:", is_displayed1)
11、获取页面元素属性的内容
print(driver.find_element_by_partial_link_text('地图').get_attribute("name"))
12、获取页面元素的标签内容print(driver.find_element_by_partial_link_text('地图').get_property("textContent"))
get_property('innerHTML')# 获取元素内的全部HTMLget_property('outerHTML')# 获取包含选中元素的HTML
13、模拟鼠标键盘的复杂操作行为
1)导入支持双击操作的模块from selenium.webdriver.common.action_chains import ActionChains
2)创建实例ac=ActionChains(driver)
1.1鼠标双击操作 (比如某一个按钮需要连续点击两次才可显示内容)
button = driver.find_element_by_class_name('double')
ac.double_click(button).perform()#双击后 点击执行
1.2鼠标移动到页面元素button = driver.find_elements_by_class_name('over')
ac.move_to_element('button').perform()#移动 点击执行
1.3综合操作button1 = driver.find_element_by_class_name('double')
button2 = driver.find_element_by_class_name('over')
ac.double_click(button1)#双击
ac.perform()#执行
ac.move_to_element(button2)#移动
ac.perform()#执行
1.4鼠标滑动、三种方式
方式一:点击且按住slider = driver.find_element_by_xpath('//div[@id="slider"]/span[1]')
# 按住滑动的按钮
ac.click_and_hold(slider)
# 向右移动到confirm元素
confirm = driver.find_element_by_id('slider_confirm')
ac.move_to_element(confirm)
# 鼠标放开
c.release()
# 执行
ac.perform()
方式二:拖拽并且放开slider = driver.find_element_by_xpath('//div[@id="slider"]/span[1]')
confirm = driver.find_element_by_id('slider_confirm')
ac.drag_and_drop(slider, confirm).perform()#开始目标、结束目标、执行
方式三:坐标拖拽x 和 yslider = driver.find_element_by_xpath('//div[@id="slider"]/span[1]')
ac.drag_and_drop_by_offset(slider,1000,0).perform()
1.5模拟键盘按键、如Tab、Enter 导入键盘操作
from selenium.webdriver.common.keys import Keysdriver.find_element_by_id('user').click()
ac.send_keys('我来了')
ac.send_keys(Keys.TAB)ac.send_keys('我在这儿')ac.send_keys(Keys.ENTER)ac.send_keys('在这儿')ac.perform()
1.6跳转到js弹窗
driver.find_element_by_class_name('alert').click()
driver.switch_to.alert.accept() #确定 switch_to切换
driver.switch_to.alert.dismiss() #取消
driver.switch_to.alert.send_keys('我在这里') #输入可见的内容
1.7跳转 frame 嵌套的网页 进入的时候需要一层一层、出来时可直接跳转到最外层
driver.switch_to.frame('aa') # 嵌套的ID
driver.find_element_by_id('kw').send_keys('慧测')
driver.find_element_by_id('su').click()
driver.switch_to.frame(0) # 嵌套的indexdriver.find_element_by_id('kw').send_keys('慧测')driver.find_element_by_id('su').click()
# 参数用elementfr = driver.find_element_by_id('aa')driver.switch_to.frame(fr)
driver.switch_to.default_content() #跳转最外层
1.8植入Cookie ---免登陆
driver.get('http://www.huicewang.com/ecshop')
driver.add_cookie({'name': '', 'value': ''})
driver.add_cookie({'name': '', 'value': ''})
driver.add_cookie({'name': '', 'value': ''})
driver.refresh()
1.9隐式等待时间
driver.implicitly_wait(10)
2.0植入js javascript
移除input的只读属性readonly
driver.get('file:///Users/chenhy/Documents/demo.html') #本地
driver.execute_script('document.getElementById("text").readOnly=false') true为只读
driver.find_element_by_id('text').send_keys('再向上')#修改信息
2.1滚屏driver.execute_script('window.scrollTo(0,100)')
# 1、 精品推荐 标签 依次进行点击 取其中显示的所有价格 打印出来
driver.get('http://www.......')
labels = driver.find_elements_by_xpath('//div[@id="itemBest"]/h2/a')
for e in labels:
e.click()
time.sleep(1)
prices = driver.find_elements_by_xpath('//div[@id="show_best_area"]//font')
for price in prices:
print(int(price.text[1:-1]))
# 2 登录、下订单
driver.get('http://www....')
driver.find_element_by_name('username').send_keys('222')
driver.find_element_by_name('password').send_keys('222')
driver.find_element_by_name('submit').click()
driver.get('http://www.huicewang.com/ecshop')
images = driver.find_elements_by_xpath('//div[@id="show_best_area"]/div[@class="goodsItem"]//img')
images[1].click()
driver.find_element_by_xpath('//li[@class="padd"]/a[1]').click()
driver.find_element_by_xpath('//form[@id="formCart"]/../table/tbody/tr/td[2]/a').click()
driver.find_element_by_xpath('//div[@id="ECS_ORDERTOTAL"]/../div[2]/input[1]').click()
print(driver.find_element_by_xpath('//*[@class="flowBox"]//font').text)