ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【python】——爬虫04 Selenium

2021-11-11 15:00:09  阅读:187  来源: 互联网

标签:webdriver 浏览器 04 python Selenium driver url Edge selenium


这里写自定义目录标题

  • selenium自动化测试框架在爬虫的应用
  • selenium大幅降低爬虫的编写难度
  • 大幅降低速度

一、selenium概述

1. 运行操作

  • selenium是一个web自动化测试工具
  • 开发使用 有头浏览器,部署使用无界面浏览器
  • webdriver本质是一个web-server,对外提供API,封装了浏览器的各种功能
  • 代码调用webdriver操作浏览器
    在这里插入图片描述

2. 安装webdriver

查看浏览器版本,安装对应的驱动
在这里插入图片描述

https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/

然后将其中的.exe文件复制到浏览器的安装路径下。
浏览器安装路径:C:\Program Files (x86)\Microsoft\Edge\Application
利用python的脚本语言,指定浏览器的驱动。(一定要指定到驱动的名称,即复制进浏览器安装路径里的.exe文件的名称。如果只到application,python脚本运行会报错。)

在这里插入图片描述

import time
from selenium import webdriver

# 通过指定msedgdriver的路径来实例化driver对象,msedgedriver放在当前目录
# msedgedriver添加环境变量了,但是不知道为什么不指定路径就会报错
driver = webdriver.Edge('C:\Program Files (x86)\Microsoft\Edge\Application\msedgedriver')
# driver = webdriver.Edge()

# 控制浏览器访问url地址
driver.get("https://www.baidu.com/")


# 百度搜索框中搜索python
driver.find_element_by_id('kw').send_keys('python')

# 点击搜索python
driver.find_element_by_id('su').click()

time.sleep(6)
# 6s后退出浏览器
driver.quit

二、元素定位

1. driver对象的常用属性、方法

driver.page_source 当前标签浏览器选然后的源码
driver.current_url 响应的源码(不是请求的源码
driver.close() 关闭标签
driver.quit() 关闭浏览器
driver.forward()页面前进
driver.back()页面后退
driver.screenshot(img_name)页面截图

import time
from selenium import webdriver

driver = webdriver.Edge('C:\Program Files (x86)\Microsoft\Edge\Application\msedgedriver')

url = 'http://www.baidu.com'
driver.get(url)
print(driver.page_source)
driver.save_screenshot('baidu.png')

在这里插入图片描述

2. 定位方法

#通过xpath进行元素定位
driver.find_element_by_xpath('//*[@id="kw"]').send_keys('python3')
# 通过css选择器 元素定位:复制selector   #kw
driver.find_element_by_css_selector('#kw').send_keys('德赫')
# 通过name属性值进行元素定位
driver.find_element_by_name('wd').send_keys('Draco')
# 通过class属性进行元素定位
driver.find_element_by_class_name('s_ipt').send_keys('')

# 通过链接文本
driver.find_element_by_link_text('hao123').click  # 报错,停在百度
driver.find_element_by_partial_link_text('hao123').click() # 跳到123

# 通过tag定位
# 目标元素是当前html中唯一标签,或众多定位标签中第一个的时候
print(driver.find_element_by_tag_name('title'))
  • find_elements 返回列表,匹配不到返回空列表
  • find_element 返回第一个匹配到的对象。匹配不到抛出异常

三、selenium其他用法

1. 句柄

工具、智能指针

# 获取当前所有标签页的句柄 构成的列表
current_windows = driver.window_handles

# 根据句柄列表索引下标进行切换
driver.switch_to.window(current_windows[0])

58同城跳转到租房页

from selenium import webdriver
driver = webdriver.Edge('C:\Program Files (x86)\Microsoft\Edge\Application\msedgedriver')

url = 'https://cd.58.com/'
driver.get(url)

# 验证当前url、句柄
print(driver.current_url)
print(driver.window_handles)
#                https://cd.58.com/
#               ['CDwindow-4560EDDD575AF11C521237B39D55F43B']

# 定位 点击租房按钮

el = driver.find_element_by_xpath('/html/body/div[3]/div[1]/div[1]/div/div[1]/div[1]/span[1]/a')
el.click()

print(driver.current_url)
print(driver.window_handles)
#
#               https://cd.58.com/
#               ['CDwindow-1C5285AC304F92464CCEF628E0E0ADCA', 'CDwindow-A2AB402B3B27B0BE9BCD11BC75D1883E']


# 两次验证发现url一样,句柄多了一个,但是url并未跳转,操作权还在首页



# 移动句柄
driver.switch_to.window(driver.window_handles[-1])
el_list = driver.find_element_by_xpath('/html/body/div[6]/div[2]/ul/li/div[2]/h2/a')
print(el_list)

2. frame

切换框架

driver.switch_to.frame()


from selenium import webdriver
driver = webdriver.Edge('C:\Program Files (x86)\Microsoft\Edge\Application\msedgedriver')

url = 'https://qzone.qq.com/'

driver.get(url)


# 切换框架
driver.switch_to.frame('login_frame')

# 直接点击头像登录
driver.find_element_by_id('img_out_qq号').click()
# 若未切换框架,则定位不到框架内的,报错

3. selenium对cookie的处理

get.cookies()  # 拿到所有cookies

获取cookies,转成字典


from selenium import webdriver
driver = webdriver.Edge('C:\Program Files (x86)\Microsoft\Edge\Application\msedgedriver')

url = 'https://www.baidu.com/'


driver.get(url)
print(driver.get_cookies())
# 返回的是一个列表,每个元素是一个字典

cookies = {data['name']:data['value'] for data in driver.get_cookies()}
print(cookies)

在这里插入图片描述

# 删除一条cookie
driver.delete_cookie("domain")

# 删除所有cookie
driver.delete_all_cookies()  
# xs python大小写知意

4. selenium控制浏览器执行js代码

滚轮下滑才会触发



from selenium import webdriver
driver = webdriver.Edge('C:\Program Files (x86)\Microsoft\Edge\Application\msedgedriver')

url = 'https://cd.lianjia.com/'
driver.get(url)


# 要点击的button在下面,没有拖动滚轮触发
# js实现拖动

js = 'scrollTo(0,500)'  # 一般宽屏,只移3纵轴
driver.execute_script(js)

el_button = driver.find_element_by_xpath('/html/body/div[2]/div/div[1]/div[2]/div[1]/a[2]')
el_button.click()

5. 页面等待

  • 强制等待 time.sleep()
  • 隐式等待driver.implicity_wait(10)
  • 显示等待
  • 手动分析

6. selenium开启无界面模式



from msedge.selenium_tools import Edge, EdgeOptions

url = 'http://www.baidu.com'

# 创建配置对象
opt = EdgeOptions()

# 添加配置参数
opt.add_argument('--headless')
opt.add_argument('--diaable-gpu')

# 创建浏览器对象
# 添加配置对象
# 
driver = Edge(options=opt)
driver.get(url)
driver.save_screenshot('baidujietu.png')

emmmm不知道哪里问题,还是会跳出来浏览器,仿佛参数没用

标签:webdriver,浏览器,04,python,Selenium,driver,url,Edge,selenium
来源: https://blog.csdn.net/grb819/article/details/121231271

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有