当前位置: 首页 > news >正文

学习爬虫第五天:自动化爬虫

自动化爬虫

  • 下载selenium自动爬虫工具
    • google自动化执行爬虫工具
    • edge自动化执行爬虫工具
  • 使用selenium (一般模拟get请求)
  • find_element / find_elements()定位元素
  • JavaScript 脚本定位元素
  • 控制鼠标和键盘


下载selenium自动爬虫工具

根据当时最新浏览器版本,下载最新版本,不然会出现很多问题

google自动化执行爬虫工具

查看google版本
请添加图片描述

没有更新的更新到最新版本
请添加图片描述

下载最新的ChromeDriver版本
请添加图片描述

Google Chrome WebDriver(ChromeDriver)下载

edge自动化执行爬虫工具

查看edge版本
请添加图片描述

没有更新的更新到最新版本
请添加图片描述

去下载最新版本的 msedgedriver
请添加图片描述

Microsoft Edge WebDriver(msedgedriver)下载

使用selenium (一般模拟get请求)

安装selenium

pip install selenium

创建Chrome浏览器对象

from selenium import webdriver  
from selenium.webdriver.chrome.service import Service# Chromedriver的位置  
Chromedriver_path=r'E:\chromedriver.exe'  
service=Service(executable_path=Chromedriver_path)  
# 创建Chrome浏览器对象  
driver1=webdriver.Chrome(service=service)  url='https://www.baidu.com'  
# 发送get请求
driver1.get(url)

创建Edge浏览器对象

from selenium import webdriver  
from selenium.webdriver.chrome.service import Service# Edgedriver的位置  
Edgedriver_path=r'E:\msedgedriver.exe'  
service=Service(executable_path=Edgedriver_path)  
# 创建Edge浏览器对象  
driver2=webdriver.Edge(service=service)  url='https://www.baidu.com'  
# 发送get请求
driver2.get(url)

driver.get(url)响应页面的常用属性和方法

类型名称…作用说明示例
属性current_url获取当前页面的 URLdriver.current_url
title获取当前页面标题driver.title
page_source获取页面的 HTML 源代码driver.page_source
window_handles获取所有窗口的句柄列表driver.window_handles
current_window_handle获取当前窗口句柄driver.current_window_handle
name获取当前浏览器名称driver.name
页面操作get(url)打开指定 URLdriver.get("https://www.baidu.com")
back()模拟浏览器“后退”driver.back()
forward()模拟浏览器“前进”driver.forward()
refresh()刷新页面driver.refresh()
查找元素find_element(By, value)查找单个元素driver.find_element(By.ID, "kw")
find_elements(By, value)查找多个元素(列表)driver.find_elements(By.TAG_NAME, "a")
执行脚本execute_script(js_code)执行 JS 脚本driver.execute_script("alert('hi')")
截图save_screenshot(file)保存当前页面截图driver.save_screenshot("baidu.png")
窗口控制maximize_window()最大化窗口driver.maximize_window()
minimize_window()最小化窗口driver.minimize_window()
set_window_size(width, height)设置窗口大小driver.set_window_size(1280, 720)
框架与窗口切换switch_to.frame(name_or_element)切换到 iframedriver.switch_to.frame("frame1")
switch_to.default_content()切回主文档driver.switch_to.default_content()
switch_to.window(handle)切换窗口driver.switch_to.window(driver.window_handles[1])
警告框switch_to.alert获取弹出框对象alert = driver.switch_to.alert
Cookies 操作get_cookies()获取所有 cookiesdriver.get_cookies()
add_cookie(cookie_dict)添加 cookiedriver.add_cookie({"name": "test", "value": "123"})
delete_all_cookies()删除所有 cookiesdriver.delete_all_cookies()
等待implicitly_wait(seconds)隐式等待元素加载driver.implicitly_wait(10)
关闭close()关闭当前窗口driver.close()
quit()关闭所有窗口并退出浏览器driver.quit()

Chrome浏览器配置 (edge浏览器同理)

# Chrome浏览器配置 
options=ChromeOptions()  
# 
# 后台运行  
options.add_argument('--headless')  # 创建Chrome浏览器对象  
driver1=webdriver.Chrome(service=service,options=options)

Chrome 常用的 options.add_argument() 参数 (edge浏览器同理)

参数作用备注
--headless无界面模式,在后台运行浏览器常用于服务器或自动化脚本
--window-size=1920,1080设置窗口大小部分网页需要特定分辨率才能加载完整内容
--incognito启动无痕模式不保存缓存、Cookies
--start-maximized启动时最大化适用于可视化调试
--disable-extensions禁用扩展插件提高运行速度
--disable-infobars禁用“Chrome 正在受到自动软件控制”的提示让界面更干净
--ignore-certificate-errors忽略 HTTPS 证书错误爬取测试网站时常用
--disable-popup-blocking禁用弹窗拦截防止脚本卡死
--user-agent="xxx"自定义 User-Agent用于伪装成特定浏览器
--lang=zh-CN,zh设置浏览器语言常用于中文页面加载正确
--mute-audio静音模式视频自动播放时不出声
--blink-settings=imagesEnabled=false禁止加载图片加快加载速度(爬虫常用)
--proxy-server=http://IP:PORT设置代理服务器用于反爬或国外访问
--disable-blink-features=AutomationControlled伪装,隐藏“被自动化控制”特征防止网站检测 Selenium

注意:有个小缺点就是 打开的浏览器在访问请求时间过久会自动退出

# 让浏览器保持运行 不会占用很多cpu内存
while True:  time.sleep(1)

find_element / find_elements()定位元素

定位方式参数写法示例说明
By.IDfind_element(By.ID, "kw")定位 id=“kw” 的元素精准、最快
By.NAMEfind_element(By.NAME, "wd")定位 name=“wd” 的输入框适用于表单元素
By.CLASS_NAMEfind_element(By.CLASS_NAME, "btn")定位 class=“btn” 的元素不能有空格(单类)
By.TAG_NAMEfind_element(By.TAG_NAME, "input")定位第一个 <input> 标签适用于通用标签查找
By.LINK_TEXTfind_element(By.LINK_TEXT, "新闻")精确匹配链接文字匹配 <a> 的文本
By.PARTIAL_LINK_TEXTfind_element(By.PARTIAL_LINK_TEXT, "新")模糊匹配链接文字模糊匹配 <a> 文本
By.XPATHfind_element(By.XPATH, '//*[@id="kw"]')根据 XPath 表达式定位功能最强大
By.CSS_SELECTORfind_element(By.CSS_SELECTOR, "#kw")使用 CSS 选择器定位高效灵活

JavaScript 脚本定位元素

使用方法

# script → 要执行的 JavaScript 代码字符串
driver.execute_script(script)

script参数常见的 JS 定位元素方式

JS 语句说明示例
document.getElementById("id")按 ID 定位获取单个元素
document.getElementsByClassName("class")按类名定位返回 HTMLCollection
document.getElementsByTagName("tag")按标签名定位返回所有相同标签元素
document.querySelector("css选择器")使用 CSS 选择器定位最灵活
document.querySelectorAll("css选择器")获取所有匹配的元素返回 NodeList

页面元素常用属性

属性说明示例
id元素的 idelement.id
className元素的 class 属性值element.className
tagName元素的标签名(大写)element.tagName"DIV"
innerHTML元素内部的 HTML 字符串element.innerHTML
outerHTML包含自身的 HTML 字符串element.outerHTML
innerText元素内部的纯文本(忽略 HTML 标签)element.innerText
textContent元素的所有文本(包括隐藏文本)element.textContent
value输入框、文本域的值element.value
href超链接的链接地址element.href
src图片或脚本的资源地址element.src
style元素的样式对象element.style.color
text获取元素文本element.text

页面元素常用方法

方法说明示例
click()模拟鼠标点击element.click()
focus()聚焦输入框element.focus()
blur()失焦element.blur()
scrollIntoView()滚动页面直到元素可见element.scrollIntoView()
setAttribute(name, value)设置属性element.setAttribute("value", "新内容")
getAttribute(name)获取属性值element.getAttribute("href")
removeAttribute(name)移除属性element.removeAttribute("disabled")
appendChild(node)添加子元素parent.appendChild(child)
remove()删除元素自身element.remove()
querySelector(selector)查找子元素element.querySelector(".child")
querySelectorAll(selector)查找所有子元素element.querySelectorAll("li")
send_keys(str)在输入框中输入文字element.send_keys("你好")
clear()清空输入框内容element.clear()

控制鼠标和键盘

导入ActionChains库

from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

常用鼠标操作方法

方法>>>>>>>>>说明示例
click(element)点击指定元素ActionChains(driver).click(btn).perform()
double_click(element)双击元素ActionChains(driver).double_click(btn).perform()
context_click(element)右击元素ActionChains(driver).context_click(btn).perform()
move_to_element(element)鼠标移动到元素上ActionChains(driver).move_to_element(menu).perform()
click_and_hold(element)按住元素不放ActionChains(driver).click_and_hold(ele).perform()
release(element)释放鼠标ActionChains(driver).release(ele).perform()
drag_and_drop(source, target)拖拽元素到目标ActionChains(driver).drag_and_drop(src, dst).perform()
drag_and_drop_by_offset(element, x, y)按偏移量拖拽ActionChains(driver).drag_and_drop_by_offset(ele, 100, 50).perform()
move_by_offset(x, y)鼠标移动到相对坐标ActionChains(driver).move_by_offset(50, 20).perform()
move_to_element_with_offset(ele, x, y)相对于元素偏移移动ActionChains(driver).move_to_element_with_offset(ele, 10, 5).perform()

常用键盘操作方法

方法 / 按键说明示例
send_keys("文本")输入文本ActionChains(driver).send_keys("hello").perform()
send_keys(Keys.ENTER)回车ActionChains(driver).send_keys(Keys.ENTER).perform()
send_keys(Keys.TAB)Tab 键ActionChains(driver).send_keys(Keys.TAB).perform()
send_keys(Keys.CONTROL, "a")Ctrl+A 全选ActionChains(driver).key_down(Keys.CONTROL).send_keys("a").key_up(Keys.CONTROL).perform()
key_down(Keys.SHIFT) / key_up(Keys.SHIFT)按下或释放键组合大写字母或快捷键
send_keys(Keys.ARROW_DOWN)下箭头选择下拉列表
send_keys(Keys.BACKSPACE)删除删除输入框内容

常用的按键组合

操作Selenium 方法说明
删除element.send_keys(Keys.BACK_SPACE)删除输入框光标前的字符
全选element.send_keys(Keys.CONTROL, 'a')选中输入框所有内容
复制element.send_keys(Keys.CONTROL, 'c')复制选中的内容到剪贴板
粘贴driver.find_element_by_id('passwordA').send_keys(Keys.CONTROL, 'v')将剪贴板内容粘贴到指定输入框

在这里插入图片描述

如果你在阅读过程中也有新的见解,或者遇到类似问题,🥰不妨留言分享你的经验,让大家一起学习。

喜欢本篇内容的朋友,记得点个 👍点赞,收藏 并 关注我,这样你就不会错过后续的更多实用技巧和深度干货了!

期待在评论区看到你的声音,我们一起成长、共同进步!😊

http://www.dtcms.com/a/467261.html

相关文章:

  • 专业的网站建设制作服务wordpress注册字段
  • 有关网站备案号规则怎么设计网站规划方案
  • 兰州网站建设推荐q479185700顶你做阀门网站电话
  • 怎么制作微信购物网站怎么开发手机app
  • 广州翼讯资讯科技有限公司 网站wordpress更换主题白屏
  • php网站开发模式有哪些网页设计与网站建设的概述
  • 网站风格细节dede增加手机网站
  • 中国数据安全保护法介绍与实践案例
  • 龙虎榜——20251010
  • 东莞建域名网站服装网站建设定制
  • 数据结构------二叉查找树
  • 电子商务网站商品怎么来制作ppt用什么软件
  • 网站官网认证加v怎么做江苏网络推广排名
  • 《jEasyUI 创建页脚摘要》
  • 设计网站的管理系统宁波网络营销推广咨询报价
  • 优秀的移动端网站合肥快速建站在线咨询
  • 网站建设要哪些seo济南手机网站建设公司报价
  • 企业网站不足云主机免费申请
  • 合肥市庐阳区住房和城乡建设局网站深圳品牌设计公司深圳品牌设计公司
  • kali BEEF的xss注入简单应用(DVWA)
  • 按键实现短按、长按、双击、长按抬起
  • 韩国男女直接做视频网站效果图工作室
  • 嵌入式企业面经实战合集(持续更新)
  • package.xml文件的作用
  • 萍乡网站建设哪家好哦小项目加盟
  • 爱妮微如何做网站链接的网址一起做网站下载数据包
  • C语言入门教程(第5讲):数组详解——一次性搞懂一维数组、二维数组与内存布局
  • c++ static_cast用法
  • 广东省建设工程总监扣分查询网站无极网络
  • 龙华建设网站公司wordpress 3.7