二、python selenium爬虫

selenium原为自动化测试工具,它会较为真实的模拟用户 使用浏览器发送请求,在使用时会打开浏览器在屏幕上操作移动 ,其支持主流的浏览器比如chrome,firefox或者PhantomJS (其不显示浏览器,但可在背后完成一系列操作,其非常适合配合selenium部署在没有界面的服务器上如果在无界面服务器上使用chrome会报错失败 );selenium相比requests慢许多许多

一.基础

1. 初始

1.安装:pip install selenium

2.下载驱动器(chrome为例子):

https://chromedriver.chromium.org/downloads

注意:下载与自己chrome版本相匹配 的,下载上将其放置在本机python.exe 同级目录下,一般报错的时候会告诉你路径,你将其放在指定路径即可。由于浏览器的不停更新,对于chromedriver需要及时更新去官网下载新的替换旧的,否则你可能执行时会遇到错误

3.测试

python 复制代码
from selenium import webdriver
import time
browser = webdriver.Chrome() # 注意要加双斜杠
url = 'https://www.baidu.com'
# 请求百度
browser.get(url)
time.sleep(2)
# 关闭浏览器
browser.close()
# 退出
browser.quit()

2. 常用属性及方法

  • driver.page_source #driver是选择了浏览器driver后返回的内容 当前标签页浏览器渲染之后的网页源代码
  • driver.current_url 当前标签页的url

  • driver.close() 关闭当前标签页,如果只有一个标签页则关闭整个浏览器
  • driver.quit() 关闭浏览器

  • driver.forward() 页面前进
  • driver.back() 页面后退

  • driver.save_screenshot(img_name) 页面截图

二.操作

1. 获取元素

解释:selenium可以通过id,class定位还可以通过xpath,推荐使用xpath简单快速

python 复制代码
find_element_by_id 						(返回一个元素)
find_element_by_class_name 			(根据类名获取元素列表)
find_element_by_name 				(根据标签的name属性值返回包含标签对象元素的列表)
find_element_by_xpath 				(返回一个包含元素的列表)
find_element_by_link_text 			(根据连接文本获取元素列表)
find_element_by_partial_link_text 	(根据链接包含的文本获取元素列表)
find_element_by_tag_name 			(根据标签名获取元素列表)
find_element_by_css_selector 		(根据css选择器来获取元素列表)

2. 元素操作

  • 元素点击:element.click() #element是需要获取到的元素
  • 输入框输入:element.send_keys(data)
  • 清除输入:element.clear()
  • 获取文本内容:element.text(data)
  • 获取属性内容:element.get_attribute("属性名")

3. 链

解释:可能实现更多元素操作

导入:from selenium.webdriver import ActionChains

python 复制代码
browser = webdriver.Chrome(executable_path='C:Python\\Python38\\chromedriver.exe')
url = 'https://www.oh.cn/login'
browser.get(url)
button = browser.find_element_by_xpath('/html/body/div/div/div[2]/form[1]/div/div[4]/div/button')

chain = ActionChains(browser) # 实例化链对象
chain.double_click(button) # 链方法 双击

chain.perform()# 执行
  • 元素双击击:chain.double_click(button) #chain是实例化链对象;button是需要获取到的元素

  • 左键点击并保持:chain.click_and_hold(button)

  • 点击-移动:chain.drag_and_drop(source, target)#鼠标左键点击source元素,然后移动到target元素释放鼠标按键

    • 拖拽移动到具体位置:chain.drag_and_drop_by_offset(source, xoffset,yoffset)
  • 按键:

python 复制代码
# 举例 ctrl-c
from selenium.webdriver.common.keys import Keys
ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
# key_down 按下只能是功能键(Contril,Alt,Shift等),send_keys相当于按了c键,key_up松开了ctrl键

三.其它方法

1.启用无界面模式

python 复制代码
options = webdriver.ChromeOptions()#实例化配置对象
options.add_argument("--headless")#配置对象添加开启无界面模式的命令
options.add_argument("--disable-gpu")#配置对象添加禁用gpu的命令
driver = webdriver.Chrome(chrome_options=options,executable_path='C:\\Users\\GaoXX\\AppData\\Local\\Programs\\Python\\Python38\\chromedriver.exe')#实例化带有配置对象的driver对象
url = 'https://www.a.cn'
driver.get(url)
driver.save_screenshot('01.png')

2.获取cookie的方法

  • 获取
python 复制代码
driver.get_cookies() # 要是获取不到,需要注意放一个time.sleep让程序等待一下,太快显示不出来
# 后面会介绍更好的等待方式
  • 添加
python 复制代码
list =[{'domain': 'www.g.cn', 'httpOnly': True, 'name': 'session', 'path': '/', 'secure': False, 'value': '.'}, {'domain': 'www.g.cn', 'expiry': 1691585195, 'httpOnly': False, 'name': 'remember_token', 'path': '/', 'secure': False, 'value': '55'}] # cookie

# 每次只能添加一个字典
for i in list:
    driver.add_cookie(i)
  • 删除
python 复制代码
#删除一条cookie
driver.delete_cookie("CookieName")

# 删除所有的cookie
driver.delete_all_cookies()

3.执行js代码

python 复制代码
js = 'alert(123)' # js语句
driver.execute_script(js) # 执行js的方法
相关推荐
青 春 记 忆1 小时前
Dify Docker Compose 通用无损升级指南:从备份、双版本预演到切换与回滚
运维·人工智能·python·docker·容器
GlueNa2SiO31 小时前
03-Flask模板引擎Jinja2详解
笔记·python·flask
临沂GEO3 小时前
GEO搜索优化科普|正规地理位置流量运营入门指南
大数据·人工智能·python·流量运营
大模型码小白4 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring
深蓝电商API5 小时前
常见反爬策略全解析
爬虫·反爬策略
荷蒲5 小时前
【小白量化Qbuddy】利用AI学习中文Python
人工智能·python·学习
数据狐(Datafox)6 小时前
京东商品列表API技术解析与落地应用(含标准 JSON 示例)
java·大数据·前端·人工智能·python·数据分析·json
量化吞吐机7 小时前
2026年下半年手工交易规则走向量化表达,产品该先接住哪一步
人工智能·python
Metaphor6927 小时前
使用 Python 读取和删除 Excel 文件属性
python·excel
迷迭香yy8 小时前
Python构建转融券多空识别系统从接口到因子的全流程 IG50免费开源股票数据API接口
开发语言·python·开源