二、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的方法
相关推荐
codists20 分钟前
《Django 5 By Example》阅读笔记:p339-p358
python·django
檀越剑指大厂24 分钟前
【Python系列】异步 Web 服务器
服务器·前端·python
m0_6760995842 分钟前
数据结构--创建链表--Python
数据结构·python·链表
搬砖的果果1 小时前
HTTP代理是什么,主要用来干嘛?
网络·python·网络协议·tcp/ip·http
白初&1 小时前
文件上传代码分析
java·c++·python·php·代码审计
菜鸟小贤贤1 小时前
pyhton+yaml+pytest+allure框架封装-全局变量渲染
python·macos·pytest·接口自动化·jinja2
赛丽曼2 小时前
Python中的简单爬虫
爬虫·python
CODE_RabbitV2 小时前
Python + 深度学习从 0 到 1(00 / 99)
开发语言·python·深度学习
微凉的衣柜3 小时前
在 PyTorch 中进行推理时,为什么 `model.eval()` 和 `torch.no_grad()` 需要同时使用?
人工智能·pytorch·python
int WINGsssss3 小时前
使用系统内NCCL环境重新编译Pytorch
人工智能·pytorch·python