python+selenium浏览器常用操作(一)


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')# 获取元素内的全部HTML
get_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 和 y
slider = 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 Keys
driver.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) # 嵌套的index
driver.find_element_by_id('kw').send_keys('慧测')
driver.find_element_by_id('su').click()
# 参数用element
fr = 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)

 

 
 


 

posted @ 2019-06-20 17:56  Smelly~child  阅读(4476)  评论(0编辑  收藏  举报