我要爬爬虫(10)-selenium使用

selenium是一个自动化测试工具,之前实现自动购票的时候就用过,这里再学一遍。就是驱动浏览器执行操作,比如点击,输入,拖拽等等。
selenium下有对应很多浏览器的webdriver,例如

browser=webdriver.Chrome()#这里只要实例化,就会打开指定的浏览器

这样就实例化一个chrome浏览器对象。
然后请求网页,获取源代码。

browser.get('http://www.baidu.com')
print(browser.page_source)
browser.close()#关闭浏览器

获取单一节点的方法
find_element_by_id(name//xpath//css_selector)
获取多个节点的方法
find_elements_by_id(name//xpath//css_selector)
获取节点各字段的值
webelement.get_attribute(‘class’)
webelement.id(text//size//location)

from selenium import webdriver
browser=webdriver.Chrome()
browser.get('http://www.baidu.com')
input=browser.find_element_by_id('kw')#找到输入框
input.send_keys('python')#输入
input.clear()#清空
input.send_keys('java')
enter=browser.find_element_by_id('su')#找到按钮
input.click()

动作链

实现拖拽

from selenium import ActionChains
browser.get('http://www.baidu.com')
browser.switch_to.iframe('iframeresult')#切换到子页面
#分别找到拖拽的起点和终点
start=browser.find_element_by_id('draggable')
end=browser.find_element_by_id('droppable')
action=ActioinChains(browser)#实例化动作
action.drag_and_drop(start,end)#指定功能
action.perform()#执行动作

execute_script()可以执行Js命令,例如

browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')

拖拽进度条到底。

切换frame

selenium打开网页后,默认在父页面里操作,不能直接获取到子页面的节点。
switch_to.iframe(‘iframeresult’)#切换到子页面
switch_to.parent_frame()#切换到父页面

延时等待

等待分三种,隐式等待,显式等待,强制等待
browser.implicitly.wait(10)
wait=WebDriverWait(browser,10)
time.sleep(10)
显式等待可以设置等待条件,在规定时间内满足条件才能通过。

from selenium import webdriver
from selenium.webdriver.common.by import By
#from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
wait=WebDriverWait(browser,10)#实例化等待对象
input=wait.until(EC.presence_of_element_located((By.ID,'q')))#传入等待条件‘出现id为q的节点’
button=wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'.btn-search')))传入等待条件‘按钮可点’
print(input,button)

如果规定时间内没有满足等待时间,就报错TimeoutExcepton.
这里support.wait模块里也有WebDriverWait函数,调用它似乎结果一样。

前进后退

连续访问三个网页,执行后退和前进操作。

browser.get('http://www.baidu.com')
browser.get('http://www.taobao.com')
browser.get('http://www.zhihu.com')
browser.back()
browser.forward()

选项卡操作

browser.execute_script('window.open()')
print(browser.window_handles)#获取选项卡列表
browser.switch_to_window(browser.window_handles[1])#切换到第二个选项卡
browser.get('http://www.taobao.com')
print(browser.window_handles)
browser.switch_to_window(browser.window_handles[0])
browser.get('https://python.org')

结果:

['CDwindow-115C8B8AFAC4EE5D41F1F38CEFE3D0F7']
['CDwindow-115C8B8AFAC4EE5D41F1F38CEFE3D0F7', 'CDwindow-7DDA99B1E3D5A7BC8DF5B92733C8BDE3']
['CDwindow-115C8B8AFAC4EE5D41F1F38CEFE3D0F7', 'CDwindow-7DDA99B1E3D5A7BC8DF5B92733C8BDE3']

异常处理

from selenium.common.exceptions import TimeException,NosuchElementException

常用的就是TimeException,NosuchElementException

cookies

browser.get_cookies()#获取该页面的cookies
browser.add_cookie()#添加cookie
browser.delete_cookies()#删除当前cookies

猜你喜欢

转载自blog.csdn.net/qq_18831501/article/details/81636864
今日推荐