–爬虫selenium库
自动化测试工具,爬虫中来解决js渲染问题
基本使用
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
browser=webdriver.Chrome()
try:
browser.get("https://www.baidu.com")
input=browser.find_element_by_id('kw')
input.send_keys('Python')
input.send_keys(Keys.ENTER)
wait=WebDriverWait(browser,10)
wait.until(EC.presence_of_element_located(By.ID,'content_left'))
print(browser.current_url)
print(browser.get_cookies())
print(browser.page_source)
finally:
browser.close()
声明浏览器对象
from selenium import webdriver
browser=webdriver.Chrome()
查找元素
browser.get('https://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)
browser.close()
常用的方法
browser.find_element_by_id
browser.find_element_by_name
browser.find_element_by_xpath
browser.find_element_by_link_text
browser.find_element_by_partial_link_text
browser.find_element_by_tag_name
browser.find_element_by_class_name
browser.find_element_by_css_selector
多个元素(多加个s),返回一个列表类型
find_elements_by_
元素交互操作
from selenium import webdriver
import time
browser=webdriver.Chrome()
browser.get("https://www.taobao.com")
input=browser.find_element_by_id('q')
input.send_keys('iphone')
time.sleep(1)
input.send_keys('ipad')
button=browser.find_element_by_class_name('btn-search')
button.click()
交互动作,将动作附加到动作链中串行执行
from selenium import webdriver
from selenium.webdriver import ActionChains
browser=webdriver.Chrome()
url="http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
browser.get(url)
browser.switch_to.frame('iframeResult')切换到iframwResult里面
source=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.perfrom()
执行javascript
from selenium inport webdriver
browser=webdriver.Chrome()
browser.get("https://www.zhihu.com/explore")
browser.execute_script('window.scrollTo(0,ducument.body.scrollHeight)')做下拉动作
browser.execute_script('alert("TO BUTTON")')
获取元素信息
1.获取属性
from selenium import webdriver
from selenium.webdriver import ActionChains
browser=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_attributs('class'))
2.获取文本值
from selenium import webdriver
browser=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)
3.获取ID,位置,标签名,大小
from selenium import webdriver
browser=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)
4.Frame
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
browser=webdriver.Chrome()
url="http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
browser.get(url)
browser.switch_to.frame('iframeResult')切换到iframwResult里面
source=browser.find_element_by_css_selector('draggable')
print(source)
try:
logo=browser.find_element_by_css_name('logo')
except NoSuchElementException:
print('NO LOGO')
browser.switch_to.parent_frame()必须切换回父元素才能获取
logo=browser.find_element_by_class_name('logo')
print(logo)
print(logo.text)
等待
1.隐式等待(当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找DOM,默认时间是0)
from selenium import webdriver
browser=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)
2.显示等待(写出一些条件和最长等待时间,如果在规定的时间内条件达成,则返回,如果没达成继续等待,直到最长等待时间)
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
browser=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)
更多操作内容查官网:selenium-python.readthedocs.io
前进和后退
from selenium import webdriver
import time
browser=webdriver.Chrome()
browser.get('https://www.baidu.com/')
browser.get('https://www.taobao.com/')
browser.get('https://www.python.org/')
browser.back()#后退
time.sleep(1)
browser.forward()#前进
browser.close()
cookies
from selenium import webdriver
browser=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)
选项卡管理
from selenium import webdriver
import time
browser=webdriver.Chrome()
browser.get('https://www.baidu.com')
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(1)
browser.switch_to_window(browser.window_handles[0])#进入第一个选项卡
browser.get('https://python.org')
异常处理
from selenium import webdriver
from selenium.common.exceptions import TimeoutException,NoSuchElementException
browser=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()