Selenium
来源:互联网 发布:北京用友软件代理商 编辑:程序博客网 时间:2024/06/07 13:55
Selenium 崔老师爬虫系列课程学习笔记
自动化测试工具,支持多种浏览器。
爬虫中主要用来解决JavaSript的渲染问题
当通过requests和urllib库无法获得网页内容,这个时候可以用Selenium库来模拟浏览器
安装
pip install selenium
基本使用
from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWaitbrowser = webdriver.Chrome()#声明浏览器对象try: browser.get('http://www.baidu.com')# 传入网址 input = browser.find_element_by_id('kw')#找出id为kw的元素 input.send_keys('Python')# 像元素中发送python字符串 input.send_keys(Keys.ENTER)# 传入Enter键 wait = WebDriverWait(browser,10) wait.until(EC.presence_of_element_located((By.ID,'content_left'))) print(browser.current_url)#打出此时的url print(browser.get_cookies)#打印出cookies print(browser.page_source)#打印出源代码finally: browser.close()
声明浏览器对象
from selenium import webdriverbrowserser = webdriver.Chrome()browser = webdriver.Firefox()browser = webdriver.Edge()browser = webdriver.PhantomJS()
访问页面
from selenium import webdriverbrowser = webdriver.Chrome()browser.get('https://www.taobao.com')print(browser.page_source())
查找元素
单个元素
from selenium import webdriverbrowser = webdriver.Chrome()browser.get('http://www.taobao.com')input_first = browser.find_element_by_id('q')input_second = browser.find_element_by_css_selector('#q')input_third = browser.find_element_by_xpath('//*[@id="q"]')print(input_first,input_second,input_third)
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
from selenium import webdriverfrom selenium.webdriver.common.by import Bybrowser = webdriver.Chrome()browser.get('https://www.taobao.com')input_first = browser.find_element(By.ID,'q')print(input_first)#browser.close()
多个元素
from selenium import webdriverbrowser = webdriver.Chrome()browser.get('https://www.taobao.com')lis = browser.find_elements_by_css_selector('.service-bd li')print(lis)
from selenium import webdriverfrom selenium.webdriver.common.by import Bybrowser = webdriver.Chrome()browser.get('https://www.taobao.com')lis = browser.find_elements(By.CSS_SELECTOR,'.service-bd li')print(lis)
元素交互操作
from selenium import webdriverimport timebrowser = webdriver.Chrome()browser.get('https://www.taobao.com')input = browser.find_element_by_id('q')input.send_keys('iPhone')time.sleep(1)input.clear()input.send_keys('ipad')button = browser.find_element_by_class_name('btn-search')button.click()
交互动作
将动作附加到动作链中串行执行
from selenium import webdriverfrom selenium.webdriver import ActionChainsbrowser = webdriver.Chrome()url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'browser.get(url)#请求一个urlbrowser.switch_to.frame('iframeResult')#切换到一个framesource = browser.find_element_by_css_selector('#draggable')#找到要拖拽对象target = browser.find_element_by_css_selector('#droppable')#找到目标位置actions = ActionChains(browser)actions.drag_and_drop(source,target)actions.perform()
更多动作:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains
执行JavaScript
from selenium import webdriverbrowser = webdriver.Chrome()browser.get('https://www.zhihu.com/explore')browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')browser.execute_script('alert("to bottom")')
获取元素信息
获取属性
from selenium import webdriverfrom selenium.webdriver import ActionChainsbrowser = webdriver.Chrome()url = 'https://www.zhihu.com/explore'browser.get(url)logo = browser.find_element_by_id('zh-top-link-logo')print(logo)print(logo.get_attribute('class'))
获取文本值
from selenium import webdriverbrowser = webdriver.Chrome()url = ('https://www.zhihu.com/explore')browser.get(url)input = browser.find_element_by_class_name('zu-top-add-question')print(input.text)
提问
获取ID、位置、标签名、大小
from selenium import webdriverbrowser = webdriver.Chrome()url = 'https:/www.zhihu.com/explore'browser.get(url)input = browser.find_element_by_class_name('zu-top-add-question')print(input.id)print(input.location)print(input.tag_name)print(input.size)
Frame
from selenium import webdriverbrowser = webdriver.Chrome()url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'browser.get(url)browser.switch_to.frame('iframeResult')source = browser.find_element_by_css_selector('#draggable')print(source)try: logo = browser.find_elememt_by_class_name('logo')except Exception: print('NoLogo')browser.switch_to.parent_frame()logo = browser.find_element_by_class_name('logo')print(logo)print(logo.text)
等待
隐式等待
当使用了隐式等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常, 换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是0
from selenium import webdriverbrowser = webdriver.Chrome()browser.implicitly_wait(10)browser.get('https://www.zhihu.com/explore')input = browser.find_element_by_class_name('zu-top-add-question')print(input.text)
提问
显式等待
from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECbrowser = webdriver.Chrome()browser.get('https://www.taobao.com/')wait = WebDriverWait(browser,10)input = wait.until(EC.presence_of_element_located((By.ID,'q'))) button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'.btn-search')))print(input,button)
详细内容:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.support.expected_conditions
前进后退
import timefrom selenium import webdriverbrowser = webdriver.Chrome()browser.get('https://www.baidu.com/')browser.get('https://www.taobao.com/')browser.get('https://www.python.org/')browser.back()time.sleep(9)browser.forward()browser.close()
Cookies
from selenium import webdriverbrowser = webdriver.Chrome()browser.get('https://www.zhihu.com/explore')print(browser.get_cookies())browser.add_cookie({'name':'name','domain':'www.zhihu.com','value':'germey'})print(browser.get_cookies())browser.delete_all_cookies()print(browser.get_cookies())
选项卡管理
import timefrom selenium import webdriverbrowser= webdriver.Chrome()browser.execute_script('window.open()')print(browser.window_handles)browser.switch_to_window(browser.window_handles[1])browser.get('https://www.taobao.com')time.sleep(5)browser.switch_to_window(browser.window_handles[0])browser.get('https://python.org')
异常处理
from selenium import webdriverfrom selenium.common.exceptions import TimeoutException, NoSuchElementExceptionbrowser = webdriver.Chrome()try: browser.get('https://www.baidu.com')except TimeoutException: print('Time Out')try: browser.find_element_by_id('hello')except NoSuchElementException: print('No Element')finally: browser.close()
详细文档:http://selenium-python.readthedocs.io/api.html#module-selenium.common.exceptions
- Selenium
- Selenium
- Selenium
- selenium
- Selenium
- Selenium
- selenium
- selenium
- Selenium
- selenium
- Selenium
- Selenium
- Selenium
- Selenium
- selenium
- Selenium
- Selenium
- selenium
- Requests
- Django资源大全
- POJ1741 [Tree] 点分治
- Android应用组件之Activity介绍1
- 关于复制构造函数赋值函数
- Selenium
- 数据结构-栈
- 79. Word Search
- 静态链接库和动态链接库的区别及优缺点
- Arduino智能小车——拼装篇
- Servlet之forward、sendRedirect、 include区别与使用
- Struts中继承接口SessionAware来实现session中的map集合
- 慕课笔记--[课程]Less即学即问
- python基础语法