爬虫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()
### Selenium 爬虫使用教程及常见问题解决方案 #### 一、Selenium简介及其应用领域 在当今互联网时代,网页爬虫已成为数据获取的关键手段之一。Selenium作为一种功能强大的自动化测试工具,在网页爬取任务中得到了广泛应用。尽管Chrome浏览器是许多开发者的首选,但在特定的工作场景下,也可能需要用到Edge浏览器来执行自动化操作[^1]。 #### 二、安装配置环境 为了启动基于Selenium的项目,需先完成必要的软件包安装: - 安装Python解释器; - 利用pip命令下载`selenium`:`pip install selenium`; - 下载对应版本的WebDriver驱动程序(如针对Edge浏览器,则应选择Microsoft Edge WebDriver),并将其路径加入系统的PATH变量中; #### 三、基础代码结构展示 下面给出一段简单的Python脚本用于打开指定URL页面,并打印标题内容: ```python from selenium import webdriver driver = webdriver.Edge() # 创建一个新的 Microsoft Edge 实例 driver.get("http://www.example.com") # 访问目标网站 print(driver.title) # 输出当前页面标题 driver.quit() # 关闭浏览器实例 ``` #### 四、处理动态加载的内容 当面对AJAX异步请求更新的部分时,直接定位元素可能会失败。此时可以采用显式等待的方式提高成功率。例如设置最长等待时间为10秒,期间每隔500毫秒检测一次条件是否满足,直到找到所需DOM节点为止[^3]: ```python from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "myDynamicElement")) ) ``` #### 五、应对HTML标签命名差异带来的挑战 实际开发过程中经常会碰到不同章节间使用的标签名存在区别的情况。对此可以通过XPath表达式的灵活运用加以克服,比如利用`string()`函数强制转换为字符串形式提取文本信息[^4]: ```python import lxml.etree as etree html_content = driver.page_source # 获取整个 HTML 文档源码 tree = etree.HTML(html_content) text_info = tree.xpath('//div/string(.)')[0] # 提取出 div 标签下的纯文本内容 ``` #### 六、遵守法律法规与伦理准则 值得注意的是,在享受技术带来便利的同时也要时刻铭记责任所在——即尊重他人知识产权以及保护个人隐私安全等方面的要求。因此,在实施任何类型的网络抓取活动前都应当充分考虑合法性因素[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值