二、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的方法
相关推荐
麦兜*20 分钟前
国产大模型平替方案:Spring Boot通义千问API集成指南
java·spring boot·后端·python·spring cloud·系统架构·springboot
菜包eo43 分钟前
视频转二维码在教育场景中的深度应用
python·计算机视觉·音视频
天航星1 小时前
《Python基础》第3期:使用PyCharm编写Hello World
python·pycharm
都叫我大帅哥1 小时前
🌟 LangChain回调机制全解析:从入门到实战,打造你的AI智能小助手
python·langchain·ai编程
七七软件开发2 小时前
二手交易 app 系统架构分析
java·python·小程序·系统架构·php
U盘失踪了8 小时前
python JSONPath 表达式生成器
linux·windows·python
山烛10 小时前
决策树学习全解析:从理论到实战
人工智能·python·学习·算法·决策树·机器学习
没有梦想的咸鱼185-1037-166312 小时前
Python科研数据可视化技术
python·机器学习·信息可视化·数据分析
奔波霸的伶俐虫14 小时前
jeecg框架@Dict不生效问题
开发语言·python
徐赛俊14 小时前
# 自动定时运行Python爬虫脚本教程(Windows任务计划程序)
windows·爬虫·python