Day34.爬虫基础之Selenium

uniapp - Invalid value “iife” for option “output.format” - UMD and IIFE output formats are not suppo Invalid value “iife” for option “output.format” - UMD and IIFE output formats are not supported for code-splitting builds. uniapp 编译报错,vite vue3 Hbuilder 中编译报错,uniapp 打包 App 报错(vue3)hbuilder提示错误,uniapp运行到手机/模拟器 App 报错(vue3)uniapp项目启动报错,如何解决这个问题,安卓app,苹果app 阅读详情

爬虫基础之Selenium



前言

本文主要是展示了Selecium库的基础知识和简单操作。


一. Selenium 基本操作

1.1 简单使用

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

browser = webdriver.Chrome()  # 新建一个浏览器窗口
try:
    browser.get('https://www.baidu.com')  # 访问特定URL
    input_info = browser.find_element_by_id('kw')  # 找到为 kw 的 id
    input_info.send_keys('Python')  # 输入为 Python 的关键词
    input_info.send_keys(Keys.ENTER)  # 点击 ENTER 直接进入
    wait = WebDriverWait(browser, 10)  # 设定最大的等待响应时间
    
    # 等待指定的元素出现。
    wait.until(EC.presence_of_element_located((By.ID, 'content_left')))
    print(browser.current_url)
    print(browser.get_cookies())
    print(browser.page_source)
    
finally:
    browser.close()  # 最后,关闭浏览器。

1.2 声明浏览器对象

from selenium import webdriver

browser = webdriver.Chrome()  # 指定特定的浏览器操作。
browser = webdriver.Firefox()
browser = webdriver.Edge()
browser = webdriver.PhantomJS()
browser = webdriver.Safari()

1.3 访问页面

from selenium import webdriver

brower = webdriver.Chrome()
brower.get('heeps://www.taobao.com')
print(brower.page_source)
brower.close()

1.4 查找元素

1.4.1 单个元素

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://www.taobao.com')

# 使用不同的方式进行查找同一个内容 id css_selector xpath
input_first = browser.find_element_by_id('q')
input_second = browser.find_element_by_css_selector('#q')
input_third = browser.find_element_by_xpath('//*[@id="q"]')

print(input_first, input_second, input_third)
browser.close()

1.4.2 一些查找元素的其他方法

  • find_element_by_name
  • find_element_by_xpath
  • find_element_by_link_text
  • find_element_by_partial_link_text
  • find_element_by_tag_name
  • find_element_by_class_name
  • find_element_by_css_selector
from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()
browser.get('heeps://www.taobao.com')
input_first = browser.find_element(By.ID, 'q')
print(input_first)
browser.close()

1.4.3 多个元素

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
lis = browser.find_elements_by_css_selector('.service-bd li')
print(lis)
browser.close()

# 类似于上面的这种方法
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
lis = browser.find_elements(By.CSS_SELECTOR, '.service-bd li')
print(lis)
browser.close()

二. Selenium 高级操作

2.1 元素交互操作

对获取的元素调用交互方法

from selenium import webdriver
import time

browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
inpit_info = browser.find_element_by_id('q')
input_info.send_keys('iphone')
time.slees(1)
input_info.clear()
input_info.send_keys('iPad')
button = browser.find_element_by_class_name('btn-search')
button.click()

更多操作: http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.remote.webelement

2.2 交互动作

将动作附加到动作链中串行执行

from selenium import webdriver
from selenium.webdriver import ActionChains

browser = webdriver.Chrome()
url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
browser.get(url)
browser.switch_to.frame('iframeResult')  # 传入frame参数
source = browser.find_element_by_css_selector('#draggable')
target = browser.find_element_by_css_selector('#droppable')
actions = ActionChains(browser)  
actions.drag_and_drop(source, target)  # 拖拽操作
actions.perform()  # 执行拖拽

更多操作: http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains

2.3 执行 JavaScript

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')

# 进度条的拖拽
browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
browser.execute_script('alert("To Bottom")')  # 拖拽到底部。

2.4 获取元素信息

2.4.1 获取属性

from selenium import webdriver
from selenium.webdriver import ActionChains

browser = webdriver.Chrome()
url = 'https://www.zhihu.com/explore'
browser.get(url)
logo = browser.find_element_by_id('zh-top-link-logo')
print(logo)
print(logo.get_attribute('class'))

2.4.2 获得文本值

from selenium import webdriver

browser = webdriver.Chrome()
url = 'https://www.zhihu.com/explore'
browser.get(url)
input_info = browser.find_element_by_class_name('Sticky AppHeader')
print(input_info.text)

2.4.3 获取ID,位置,标签名,大小

from selenium import webdriver

browser = webdriver.Chrome()
url = 'https://www.zhihu.com/explore'
browser.get(url)
input_info = browser.find_element_by_class_name('zu-top-add-question')
print(input_info.id)
print(input_info.location)
print(input_info.tag_name)
print(input_info.size)

2.4.4 Frame

import time
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException

browser = webdriver.Chrome()
url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
browser.get(url)
browser.switch_to.frame('iframeResult')
source = browser.find_element_by_css_selector('#draggable')
print(source)
try:
    logo = browser.find_element_by_class_name('logo')
except NoSuchElementException:
    print('NO LOGO')
browser.switch_to.parent_frame()
logo = browser.find_element_by_class_name('logo')
print(logo)
print(logo.text)

2.5 等待

2.5.1 隐式等待

当使用了隐式等待执行测试点 时候,如果 WebDriver 没有在 DOM 中找到元素,将继续等待,超出设定时间后则跑出找不到元素的异常。换句话说,当查找元素或者元素并没有立即出现的时候,饮食等待将等待一段时间再查找 DOM,默认时间为0.

from selenium import webdriver

browser = webdriver.Chrome()
browser.implicitly_wait(10)
browser.get('https://www.zhihu.com/explore')
input = browser.find_element_by_class_name('zu-top-add-question')
print(input)

2.5.2 显式等待

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

browser = webdriver.Chrome()
browser.get('https://www.taobao.com/')
wait = WebDriverWait(browser, 10)
input_info = wait.until(EC.presence_of_element_located((By.ID, 'q')))
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-search')))
print(input_info, button)
  • title_is 标题是某内容
  • title_contains 标题包含某内容
  • presence_of_element_located 元素加载出,传入定位元组,如(By.ID, ‘p’)
  • visibility_of_element_located 元素可见,传入定位元组
  • visibility_of 可见,传入元素对象
  • presence_of_all_elements_located 所有元素加载出
  • text_to_be_present_in_element 某个元素文本包含某文字
  • text_to_be_present_in_element_value 某个元素值包含某文字
  • frame_to_be_available_and_switch_to_it frame加载并切换
  • invisibility_of_element_located 元素不可见
  • element_to_be_clickable 元素可点击
  • staleness_of 判断一个元素是否仍在DOM,可判断页面是否已经刷新
  • element_to_be_selected 元素可选择,传元素对象
  • element_located_to_be_selected 元素可选择,传入定位元组
  • element_selection_state_to_be 传入元素对象以及状态,相等返回True,否则返回False
  • element_located_selection_state_to_be 传入定位元组以及状态,相等返回True,否则返回False
  • alert_is_present 是否出现Alert

详细内容:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.support.expected_conditions

2.6 前进后退

import time 
from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://www.baidu.com/')
browser.get('https://www.taobao.com/')
browser.get('https://www.python.org/')
browser.back()
time.sleep(2)
browser.forward()
browser.close()

2.7 Cookies

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
print(browser.get_cookies())
browser.add_cookie({'name':'name', 'domain':'www.zhihu.com','value':'germey'})
print(browser.get_cookies())
browser.delete_all_cookies()
print(browser.get_cookies())
browser.close()

2.8 选项卡管理

import time
from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.execute_script('window.open()')  # 在同一个浏览器界面上打开一个新的选项卡
print(browser.window_handles)
browser.switch_to_window(browser.window_handles[1])
browser.get('https://www.taobao.com')
time.sleep(1)
browser.switch_to_window(browser.window_handles[0])
browser.get('https://python.org')
time.sleep(3)
browser.close()

2.9 异常处理

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.find_element_by_id('hello')  # id 不存在

# +++++++++++++++++++++++++++++++++++++++++++++++++ #
from selenium import webdriver
from selenium.common.exceptions import TimeoutException, NoSuchElementException

browser = webdriver.Chrome()
try:
    browser.get('https://www.baidu.com')
except TimeoutException:
    print('Time Out!')
    
try:
    browser.find_element_by_id('hello')
except NoSuchElementException:
    print('No Element')
finally:
    browser.close()

详细文档:http://selenium-python.readthedocs.io/api.html#module-selenium.common.exceptions


总结

今天主要是学习了Selenium的基础知识和简单使用,对于具体的实践,还是要多实战来看。对该库有兴趣的小伙伴,可以观看官方文档。

溜了遛了,脑壳疼。Loading(34/100)。。。

SAP ERP 系统订单行项目中的计划行(Scheduled Line)详解 *计划行(Scheduled Line)**是SAP系统中订单行项目(如采购订单、生产订单、销售订单等)的细分单元,用于记录和管理物料的供应或需求计划。每个订单行项目可以包含一个或多个计划行,每个计划行对应具体的交货日期、数量、需求类型(如采购申请、生产订单、库存调拨等)以及相关的物流控制参数。简单来说,计划行是系统对某一物料在特定时间点的供需状态的详细规划,它将订单分解为更细粒度的执行步骤,确保供应链各环节(如采购、生产、仓储)能够按计划协同工作。 阅读详情

相关推荐

关于RT-Thread中PWM无法正常输出的学习

按照官方的PWM配置,并没有输出PWM,网上有比较多的办法,试了很多,有些还是不能实现输出,这里做个记录。记录自己完成PWM输出的过程,以及修改的地方。 关于STM32CubeMX配置就不多说了,网上有很多。 首先必定是按照流程来,一定一定按照流程来!!! 需要注意的是加上通道数!!!! 这是流程上没有的,也是RTT的一点小BUG吧 配上board.c中添加的代码,我用的是PA2定时2的通道3,需要使用的朋友修改对应定时器和GPIO! void HAL_TIM_Base_MspInit(TIM_Han

weixin_42566346的博客 3554

Python34+selenium自动化测试环境部署

selenium简介selenium 是一个web的自动化测试工具,不少学习功能自动化的同学开始首选selenium ,相因为它相比QTP有诸多有点: 免费,也不用再为破解QTP而大伤脑筋 小巧,对于不同的语言它只是一个包而已,而QTP需要下载安装1个多G 的程序。 这也是最重要的一点,不管你以前更熟悉C、 java、ruby、python、或都是C# ,你都可以通过selenium完成自动化测试,

光阴迷客的知识库 900

MaxKey+JeecgBoot单点登录实战:手把手教你从零配置到账户同步

本文提供MaxKey与JeecgBoot单点登录(SSO)的实战整合指南。详细讲解从MaxKey应用注册、JeecgBoot前后端改造,到最终实现账户同步的完整步骤,重点解决Shiro配置、令牌交换等关键问题,帮助企业构建统一、可扩展的身份管理体系。

weixin_29258297的博客 541

python网络爬虫进阶day01

  2019.5.23,今天学习了selenium+chromedriver获取动态数据: selenium相当于是一个机器人一样,可以模拟人的行为,例如:点击,填充数据,翻页等。chromedriver是驱动Chrome浏览器的一个驱动程序。必须通过chromedriver才能得到一个driver,爬虫才能模拟人的行为。 1 # Author:K 2 from seleni...

weixin_30879833的博客 159

深入解析STM32驱动AT25DF321A FLASH芯片的SPI通信与数据完整性验证

本文深入解析STM32通过SPI通信驱动AT25DF321A FLASH芯片的全过程,包括硬件连接、驱动函数实现与数据完整性验证。重点介绍SPI配置、读写操作优化及CRC校验方法,确保数据存储的可靠性,为嵌入式存储系统开发提供实用指南。

agile9scrum的博客 1064

在 Linux 虚拟机中手动安装 VMware Tools

对于 Linux 虚拟机,您可以从命令行手动安装 VMware Tools。对于 Linux 的较高发行版,请使用集成的 open-vm-tools 版本。 前提条件 有关 open-vm-tools 的操作系统兼容性的详细信息,请参见《VMware 兼容性指南》,网址为VMware Compatibility Guide - System Search。 开启虚拟机。 确认客户机操作系统正在运行。 因为 VMware Tools 安装程序是使用 Perl 编写的,请确认已在客户机操作系统中安..

m0_62526815的博客 1756

python网络爬虫进阶day02-12306抢票

  2019.5.25,今天用selenium+chromedriver做了一个12306抢票小爬虫,总共100+行代码,写的真费劲,看来还是没学到家,话不多说,首先看一下README: 12306抢票功能: 通过手动登录,手动填写出发地,目的地,出发日期,然后自动完成抢票程序流程: - 1、首先进入登录界面(logging_page),然后等待用户登录。 - 2、在登录...

weixin_30319153的博客 270

国内优秀MES开源框架

一套springboot 开源框架 代码标准规范化。 界面展示 演示地址 http://wangziyangmes.pzzd.xyz 用户名admin 密码123 系统管理 工艺管理 计划管理 物料管理 *用户管理* *工艺路线管理* 工单下达...

q707231019的博客 2万+

python+selenium 爬取微博(网页版)并解决账号密码登录、短信验证

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

暗夜苍茫的博客 9979

Scrapy实现微博关键词爬虫(爬虫结果写入mongodb)

话不多说,上代码: spiders文件夹下的microBlogSpider.py里这样写: # -*- coding: utf-8 -*- import scrapy from scrapy import Spider, Request, FormRequest from scrapy.selector import Selector import datetime import random from blogSpider.items import microBlogItem, keyWordItem f

qq_39360565的博客 1779

2025B卷最新华为OD机试持续收录中 - 真题题库清单,按考点划分(Python / JS / C++ / JAVA / C语言)

2025B卷最新华为OD机试持续收录中 - 真题题库清单,按考点划分(Python / JS / C++ / JAVA / C语言)

算法大师! 3057

day05 selenium库的基础使用

selenium请求库实现爬取京东商品信息:    导入selenium库     利用try-catch实现对是否能连接进行异常检测与捕获     get方式向京东主页发送请求     通过id查找iput输入框     send_kyes为当前标签传值     通过send_keys按回车键实现查询     通过find_elements_by_class_name爬取每个商品  ...

weixin_30563319的博客 113

11、频率响应与伯德图详解

本文详细介绍了电子电路分析中的频率响应与伯德图,涵盖分贝的定义与计算、带宽与3dB点、放大器反馈机制、倍频程与十倍频程概念,并系统讲解了基于实数和复数零极点的伯德图构建方法。通过具体示例分析了传递函数的渐近近似、幅度与相位响应,并结合MATLAB工具展示了伯德图的绘制过程。文章旨在帮助读者深入理解电路在不同频率下的行为特性,为电路设计与优化提供理论支持。

white的博客 172

C#使用Selenium

介绍: Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。 利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬。 所以Selenium现在被广泛用于Python爬虫。查了下资料,发现这个工具确实强大,最重要的是,C#...

天锋 BLOG 6611

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

python爬虫抢火车票_python网络爬虫进阶day02-12306抢票

1 #Author:K2 from selenium importwebdriver3 from selenium.webdriver.support.ui importWebDriverWait4 from selenium.webdriver.support importexpected_conditions as EC5 from selenium.webdriver.common.by i...

weixin_39565777的博客 340

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【爬虫基础】第26讲 selenium下拉框处理方式

【代码】【爬虫基础】第26讲 selenium下拉框处理方式。

a272329874a的博客 659

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

python爬虫抢票12306_python网络爬虫进阶day02-12306抢票

1 #Author:K2 from selenium importwebdriver3 from selenium.webdriver.support.ui importWebDriverWait4 from selenium.webdriver.support importexpected_conditions as EC5 from selenium.webdriver.common.by i...

weixin_39765588的博客 276

php 爬虫 天气,爬虫-最近几天各个城市的天气,爬取

import reimport csvimport timeimport requestsfrom bs4 import BeautifulSoupfrom selenium import webdriverfrom selenium.webdriver import ActionChainsfrom selenium.webdriver.support.select import Selectw...

weixin_28715953的博客 145

实战项目:开发一个电商商品信息抓取机器人(Day 34-35)

本文介绍了基于Selenium的电商商品信息抓取项目实现方案。该项目通过模拟真实用户操作,克服动态加载页面带来的挑战,实现京东商品搜索、页面滚动加载、数据提取和存储的完整流程。技术要点包括:1)配置无头浏览器并优化性能;2)处理懒加载机制;3)精准定位商品信息元素;4)实现自动翻页功能。项目综合运用了XPath定位、显式等待、JavaScript执行等Selenium核心技能,构建了一个稳定可靠的数据采集系统,适用于各类动态渲染的电商网站数据抓取场景。

IT深耕十余载,大道之简 1247

selenium定位选择框

在爬取数据时,有时数据太多,而官网提供了筛选功能select标签,像这样的数据,我们只需要定位元素,点击即可。

yqqの博客 496

Day-6 python

昨日作业:  自动登录抽屉新热榜 1 from selenium import webdriver 2 import time 3 4 driver = webdriver.Chrome(r'D:\Python\chromedriver_win32\chromedriver') 5 6 # 把窗口转成全屏 7 driver.maximize_windo...

weixin_30610755的博客 194

Day-5 python

上周作业:爬取豆瓣TOP250电影信息 1 ''' 2 爬取豆瓣TOP250电影信息 3 4 主页: 5 第一页: 6 https://movie.douban.com/top250?start=0&filter= 7 第二页: 8 https://movie.douban.com/top250...

weixin_30576827的博客 367

Python实训day4

''' 2 爬取豆瓣TOP250电影信息 3 4 主页: 5 第一页: 6 https://movie.douban.com/top250?start=0&filter= 7 第二页: 8 https://movie.douban.com/top250?start=25&filter= 9 ...

weixin_30914981的博客 342

day6

昨日作业:自动登陆抽屉新热榜 1 from selenium import webdriver 2 import time 3 4 driver = webdriver.Chrome(r'D:\BaiduNetdiskDownload\chromedriver_win32\chromedriver.exe') 5 6 # 把窗口转成全屏 7 driver.max...

weixin_34021089的博客 412

爬虫综合大作业

作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3159 爬虫综合大作业 选择一个热点或者你感兴趣的主题。 选择爬取的对象与范围。 了解爬取对象的限制与约束。 爬取相应内容。 做数据分析与文本分析。 形成一篇文章,有说明、技术要点、有数据、有数据分析图形化展示与说明、文本分析图形化展示与说明。 文章公开发...

weixin_30703911的博客 198

DAY-02

爬取豆瓣网站电影top250 1 """ 2 请求头: 3 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36 4 5 cookie:    bid=E...

weixin_30919919的博客 100
上一篇: Day33.爬虫基础之PyQuery
下一篇: Day35.关系型数据库入门
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值