爬虫+自动化利器selenium之自学成才篇(代码片段)

Dream丶Killer Dream丶Killer     2023-01-12     610

关键词:


❤ 系列内容 ❤
爬虫+自动化利器 selenium 之自学成才篇(一)
主要内容:selenium 简介、selenium 安装、安装浏览器驱动、8 种方式定位页面元素、浏览器控制、鼠标控制、键盘控制

爬虫+自动化利器 selenium 之自学成才篇(二)
主要内容:三种等待方式(显式等待、隐式等待、强制等待)、一组元素的定位方式、切换操作(窗口切换、表单切换)、弹窗处理等。

爬虫+自动化利器 selenium 之自学成才篇(三)
主要内容:文件上传 & 下载、cookie 操作、调用 JavaScript(滑动滚动条)、关闭操作、页面截图等。



上传 & 下载文件

上传文件

常见的 web 页面的上传,一般使用 input 标签或是插件(JavaScriptAjax),对于 input 标签的上传,可以直接使用 send_keys(路径) 来进行上传。
先写一个测试用的页面。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <input type="file" name="">
</body>
</html>


下面通过 xpath 定位 input 标签,然后使用 send_keys(str(file_path) 上传文件。

from selenium import webdriver
from pathlib import Path
from time import sleep


driver = webdriver.Chrome()
file_path = Path(Path.cwd(), '上传下载.html')
driver.get('file:///' + str(file_path))

driver.find_element_by_xpath('//*[@name="upload"]').send_keys(str(file_path))

下载文件

Chrome浏览器

Firefox 浏览器要想实现文件下载,需要通过 add_experimental_option 添加 prefs 参数。

  • download.default_directory:设置下载路径。
  • profile.default_content_settings.popups:0 禁止弹出窗口。

下面测试下载搜狗图片。指定保存路径为代码所在路径。

from selenium import webdriver 

prefs = 'profile.default_content_settings.popups': 0,
         'download.default_directory': str(Path.cwd())
option = webdriver.ChromeOptions() 
option.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(options=option)
driver.get("https://pic.sogou.com/d?query=%E7%83%9F%E8%8A%B1&did=4&category_from=copyright")
driver.find_element_by_xpath('/html/body/div/div/div/div[2]/div[1]/div[2]/div[1]/div[2]/a').click()

driver.switch_to.window(driver.window_handles[-1])
driver.find_element_by_xpath('./html').send_keys('thisisunsafe')

代码最后两句猜测有理解什么意思的吗~,哈哈,实际作用是当你弹出像下面的页面 “您的连接不是私密连接” 时,可以直接键盘输入 “thisisunsafe” 直接访问链接。那么这个键盘输入字符串的操作就是之间讲到的 send_keys,但由于该标签页是新打开的,所以要通过 switch_to.window() 将窗口切换到最新的标签页。

Firefox浏览器

Firefox 浏览器要想实现文件下载,需要通过 set_preference 设置 FirefoxProfile() 的一些属性。

  • browser.download.foladerList:0 代表按浏览器默认下载路径;2 保存到指定的目录。
  • browser.download.dir:指定下载目录。
  • browser.download.manager.showWhenStarting:是否显示开始,boolean 类型。
  • browser.helperApps.neverAsk.saveToDisk:对指定文件类型不再弹出框进行询问。
  • HTTP Content-type对照表https://www.runoob.com/http/http-content-type.html
from selenium import webdriver
import os
fp = webdriver.FirefoxProfile()
fp.set_preference("browser.download.dir",os.getcwd())
fp.set_preference("browser.download.folderList",2)
fp.set_preference("browser.download.manager.showhenStarting",True)
fp.set_preference("browser.helperApps.neverAsk.saveToDisk","application/octet-stream")

driver = webdriver.Firefox(firefox_profile = fp)
driver.get("https://pic.sogou.com/d?query=%E7%83%9F%E8%8A%B1&did=4&category_from=copyright")
driver.find_element_by_xpath('/html/body/div/div/div/div[2]/div[1]/div[2]/div[1]/div[2]/a').click()

运行效果与 Chrome 基本一致,这里就不再展示了。


cookies操作

cookies 是识别用户登录与否的关键,爬虫中常常使用 selenium + requests 实现 cookie持久化,即先用 selenium 模拟登陆获取 cookie ,再通过 requests 携带 cookie 进行请求。

webdriver 提供 cookies 的几种操作:读取、添加删除。

  • get_cookies:以字典的形式返回当前会话中可见的 cookie 信息。
  • get_cookie(name):返回 cookie 字典中 key == namecookie 信息。
  • add_cookie(cookie_dict):将 cookie 添加到当前会话中
  • delete_cookie(name):删除指定名称的单个 cookie
  • delete_all_cookies():删除会话范围内的所有 cookie

下面看一下简单的示例,演示了它们的用法。

from selenium import webdriver 

driver = webdriver.Chrome()
driver.get("https://blog.csdn.net/")

# 输出所有cookie信息
print(driver.get_cookies())

cookie_dict = 
    'domain': '.csdn.net',
     'expiry': 1664765502,
     'httpOnly': False,
     'name': 'test',
     'path': '/',
     'secure': True,
     'value': 'null'

# 添加cookie
driver.add_cookie(cookie_dict)
# 显示 name = 'test' 的cookie信息
print(driver.get_cookie('test'))
# 删除 name = 'test' 的cookie信息
driver.delete_cookie('test')
# 删除当前会话中的所有cookie
driver.delete_all_cookies()



调用JavaScript

webdriver 对于滚动条的处理需要用到 JavaScript ,同时也可以向 textarea 文本框中输入文本( webdriver 只能定位,不能输入文本),webdriver 中使用execute_script方法实现 JavaScript 的执行。

滑动滚动条

通过 x ,y 坐标滑动

对于这种通过坐标滑动的方法,我们需要知道做表的起始位置在页面左上角(0,0),下面看一下示例,滑动 CSDN 首页。

from selenium import webdriver 
from time import sleep

driver = webdriver.Chrome()
driver.get("https://blog.csdn.net/")
sleep(1)

js = "window.scrollTo(0,500);"
driver.execute_script(js)

通过参照标签滑动

这种方式需要先找一个参照标签,然后将滚动条滑动至该标签的位置。下面还是用 CSDN 首页做示例,我们用循环来实现重复滑动。该 li 标签实际是一种懒加载,当用户滑动至最后标签时,才会加载后面的数据。

from selenium import webdriver 
from time import sleep

driver = webdriver.Chrome()
driver.get("https://blog.csdn.net/")
sleep(1)
driver.implicitly_wait(3)

for i in range(31, 102, 10):
    sleep(1)
    target = driver.find_element_by_xpath(f'//*[@id="feedlist_id"]/li[i]')
    driver.execute_script("arguments[0].scrollIntoView();", target)


其他操作

关闭所有页面

使用 quit() 方法可以关闭所有窗口并退出驱动程序。

driver.quit()

关闭当前页面

使用 close() 方法可以关闭当前页面,使用时要注意 “当前页面” 这四个字,当你关闭新打开的页面时,需要切换窗口才能操作新窗口并将它关闭。,下面看一个简单的例子,这里不切换窗口,看一下是否能够关闭新打开的页面。

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get('https://blog.csdn.net/')
driver.implicitly_wait(3)

# 点击进入新页面
driver.find_element_by_xpath('//*[@id="mainContent"]/aside/div[1]/div').click()
# 切换窗口
# driver.switch_to.window(driver.window_handles[-1])

sleep(3)
driver.close()


可以看到,在不切换窗口时,driver 对象还是操作最开始的页面。

对当前页面进行截图

wendriver 中使用 get_screenshot_as_file() 对 “当前页面” 进行截图,这里和上面的 close() 方法一样,对于新窗口的操作,一定要切换窗口,不然截的还是原页面的图。对页面截图这一功能,主要用在我们测试时记录报错页面的,我们可以将 try except 结合 get_screenshot_as_file() 一起使用来实现这一效果。

try:
    driver.find_element_by_xpath('//*[@id="mainContent"]/aside/div[1]/div').click()
except:
    driver.get_screenshot_as_file(r'C:\\Users\\pc\\Desktop\\screenshot.png')

⭐️往期精彩,不容错过⭐️

总结篇
❤️两万字,50个pandas高频操作【图文并茂,值得收藏】❤️
❤️吐血总结《Mysql从入门到入魔》,图文并茂(建议收藏)❤️


工具篇
⭐️Python实用小工具之制作酷炫二维码(有界面、附源码)⭐️
❤️Python实用工具之制作证件照(有界面、附源码)❤️
❤️女朋友桌面文件杂乱无章?气得我用Python给她做了一个文件整理工具❤️

更多有趣的文章及干货,尽在

👇 👇 👇

爬虫+自动化利器selenium之自学成才篇(代码片段)

文章目录selenium简介selenium安装安装浏览器驱动确定浏览器版本下载驱动定位页面元素打开指定页面id定位name定位class定位tag定位xpath定位css定位link定位partial_link定位浏览器控制修改浏览器窗口大小浏览器前进&后退浏览器刷新... 查看详情

如何入门爬虫(基础篇)

...爬虫实战七之计算大学本学期绩点Python爬虫实战八之利用Selenium抓取淘宝匿名旺旺三、爬虫利器Python爬虫利器一之Requests库的用法Python爬虫利器二之BeautifulSoup的用法Python爬虫利器三之Xpath语法与lxml库的用法Python爬虫利器四之Phantom... 查看详情

python爬虫之web自动化测试工具selenium&&chromehandless(代码片段)

​​活动地址:CSDN21天学习挑战赛@作者:SYFStrive@创建时间:2022/8/510:42📜:Selenium&&Chromehandless🥧:点击跳转到上一篇续文🦄📋目录Selenium简介为什么使用selenium❓如何安装selenium❓s 查看详情

爬虫之selenium(代码片段)

简介selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果... 查看详情

selenium3自动化测试(这一篇就够了)——自学篇(代码片段)

目录(一)安装selenium(二)selenium3浏览器驱动(三)selenium元素定位(四)控制浏览器操作(五)WebDriver常用方法(六)鼠标事件(七)键盘事件(八࿰ 查看详情

python-爬虫之selenium(代码片段)

...:FSA全栈行动👋一、Selenium的介绍Selenium是一个Web自动化测试工具,最初是为网站自动化测试而开发,Selenium可以直接调用浏览器,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器),可... 查看详情

爬虫之selenium模块

selenium模块介绍```pythonselenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网... 查看详情

爬虫系列之第3章-selenium模块(代码片段)

简介selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果... 查看详情

pythonselenium自动化爬虫与测试网页利器

文章大纲简介一些问题的解决模拟鼠标点击失败设置点击动作完成后不关闭窗口网页跳转的设置新网址,当前选项卡跳转新建选项卡跳转使用selenium实现动态加载XHR数据的获取一段整体的样例code参考文献与学习路径简介官网:htt... 查看详情

pythonselenium自动化爬虫与测试网页利器

文章大纲简介一些问题的解决模拟鼠标点击失败设置点击动作完成后不关闭窗口网页跳转的设置新网址,当前选项卡跳转新建选项卡跳转使用selenium实现动态加载XHR数据的获取一段整体的样例code对象写入csv参考文献与学习路径简... 查看详情

100天精通python(爬虫篇)——第47天:selenium自动化操作浏览器(代码片段)

文章目录每篇前言一、Selenium框架环境搭建1.下载模块2.安装浏览器驱动WebDriver二、基础操作1.打开浏览器2.无界面模式3.元素定位4.元素操作5.前进后退6.执行js7.页面等待隐式等待(常用)显式等待(了解)三、进阶... 查看详情

0基础学爬虫爬虫基础之自动化工具selenium的使用(代码片段)

...【0基础学爬虫】专栏,帮助小白快速入门爬虫,本期为自动化工具Selenium的使用。概述目前,很多网站都采用Ajax等技术进行动态加载数据,想要采集这类网站的数据,需要通过抓包对网站的数据接口进行分析,去寻找想要采集... 查看详情

python爬虫利器selenium从入门到进阶(代码片段)

...ium进阶selenium的简介与安装selenium是最广泛使用的开源WebUI自动化测试套件之一,它所支持的语言包括C++、Java、Perl、PHP、Python和Ruby,在数据抓取方面也是一把利器,能够解决大部分网页的反爬措施,当然它... 查看详情

selenium3自动化测试(这一篇就够了)——自学篇(代码片段)

目录(一)安装selenium(二)selenium3浏览器驱动(三)selenium元素定位(四)控制浏览器操作(五)WebDriver常用方法(六)鼠标事件(七)键盘事件(八)获取断言信息... 查看详情

selenium3自动化测试(这一篇就够了)——自学篇(代码片段)

目录(一)安装selenium(二)selenium3浏览器驱动(三)selenium元素定位(四)控制浏览器操作(五)WebDriver常用方法(六)鼠标事件(七)键盘事件(八)获取断言信息... 查看详情

爬虫之selenium模块(代码片段)

引入selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果... 查看详情

3爬虫之selenium模块(代码片段)

...库,对外提供的接口可以操作浏览器,然后让浏览器完成自动化的操作。 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题selenium本质是通过驱动浏览器,完全模拟浏览器... 查看详情

python-爬虫之selenium(代码片段)

...:FSA全栈行动👋一、Selenium的介绍Selenium是一个Web自动化测试工具,最初是为网站自动化测试而开发,Selenium可以直接调用浏览器,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器),可... 查看详情