爬虫selenium库

–爬虫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()
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值