编程小白的自学笔记十二(python爬虫入门四Selenium的使用实例二)

系列文章目录

编程小白的自学笔记十一(python爬虫入门三Selenium的使用+实例详解)

编程小白的自学笔记十(python爬虫入门二+实例代码详解) 

编程小白的自学笔记九(python爬虫入门+代码详解) 


目录

系列文章目录

前言

一、使用Selenium打开子页面

二、使用Selenium实现网页滚动

三、使用selenium操作下拉列表

总结


前言

昨天已经学了使用Selenium相关函数打开百度网页,并在输入框内输入我们想要的文字,今天我们再进一步学习。


一、使用Selenium打开子页面

什么是子页面:一个页面中存在多个子页面,通常是指在一个网站或网页的主要内容划分成若干板块,每个板块在网页中的体现就是栏目。我们已百度贴吧为例,它的广告栏就是一个子页面。

 

可以看出子页面也是有ID的,这样我们就可以通过ID锁定这个子页面,

代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver= webdriver.Chrome()
driver.get('https://tieba.baidu.com/')
element = driver.find_element(By.ID, 'iframeu6739266_0')
driver.switch_to.frame(element)
driver.find_element(By.ID, 'title0').click()
time.sleep(50)

结果如图: 

 

我们可以看到,我们打开了广告栏的第一个广告。下面我们仔细研究一下代码: 

“element = driver.find_element(By.ID, 'iframeu6739266_0')”这一段代码就锁定了子网页的位置,

“driver.switch_to.frame(element)”表示切换到子网页,这里面的参数element必须是一个WebElement对象,表示要切换到的iframe元素

“driver.find_element(By.ID, 'title0').click()”表示点击第一个广告。

Ps:个人是一个小白,对于网页代码不是很了解,参考第一天的案例,我们难道不能直接锁定第一个广告的ID,进行点击吗?然后我就使用的代码,很遗憾,无法得到想要的结果。  

二、使用Selenium实现网页滚动

不多说,先上代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver= webdriver.Chrome()
driver.get('https://blog.csdn.net/m0_49914128?type=blog')
for i in range(0,100,5):
    js= f'window.scrollTo(0,{i*100})'
    driver.execute_script(js)
    time.sleep(3)
 

程序运行以后,自动向下查看网页内容,就好像我们自己在滚动鼠标。

运行截图我就不截了,就是我的个人主页在向下滚动。

我们仔细分析一下代码:

前面都容易理解,主要说明下for循环里面的内容

“ driver.execute_script(js)”,driver.execute_script() 是 Selenium WebDriver 提供的一个方法,用于在当前页面执行 JavaScript 代码。它的语法如下:driver.execute_script(script, *args)其中,script 是要执行的 JavaScript 代码,*args 是可选参数,用于传递给 JavaScript 代码的参数。

那么就是说“ f'window.scrollTo(0,{i*100})'”其实是一串JavaScript代码,它实现的功能是用于将页面滚动到指定的坐标。其中,0 是横坐标,i*100 是纵坐标。

三、使用selenium操作下拉列表

当我看到这个作用的时候,我首先想到的是我找到位置,然后使用click()点击再选择不就行了,然后我进行了实际操作,确实可以点击出下拉表,因为学习的不够深入,在下拉列表里操作点击需要选择的项就不行了。于是我尝试了N种方法,最终成功了,代码是这样的:

driver.find_element(By.ID,'cardType').click()

driver.find_element(By.CSS_SELECTOR, "option[value='B']").click()

或者替换成

driver.find_element(By.XPATH,"//option[@value='B']").click()

也行。

 我们再来看看专门针对下拉表的方面,完整代码如下:

 

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
import time
driver= webdriver.Chrome()
driver.get('https://kyfw.12306.cn/otn/regist/init')
select = Select(driver.find_element(By.ID,'cardType'))
select.select_by_value("护照")
time.sleep(30)

本以为会自动将证件类型选择护照,结果报错,找不到“护照”,将“select.select_by_value("护照")”代码替换成“select.select_by_visible_text("护照")”成功运行。如下图 

 


我们来分析下代码:

driver.find_element(By.ID,'cardType')”是选定下拉列表的位置, Select()函数创建一个 Select 对象,这个对象可以用来操作下拉菜单中的选项,“select.select_by_visible_text("护照")”就实现了选择护照的功能。

 为了找出为什么使用value找不到的原因,我加了一行代码,“print(select.options)”,select.options是返回所以选项的列表,我对其进行输出,看结果是什么:

 [<selenium.webdriver.remote.webelement.WebElement (session="7792dee3dda6be18ea0d6894ce7884d9", element="4214676d-d07d-456a-b12b-cbf0cb593edf")>, <selenium.webdriver.remote.webelement.WebElement (session="7792dee3dda6be18ea0d6894ce7884d9", element="d768f3b0-ab39-473e-bf63-8969890d8886")>, <selenium.webdriver.remote.webelement.WebElement (session="7792dee3dda6be18ea0d6894ce7884d9", element="62c2afd7-edc3-42c0-8109-8e67db452d4c")>, <selenium.webdriver.remote.webelement.WebElement (session="7792dee3dda6be18ea0d6894ce7884d9", element="b95f5b92-b4dc-4173-b449-722b7f7689a2")>, <selenium.webdriver.remote.webelement.WebElement (session="7792dee3dda6be18ea0d6894ce7884d9", element="d148fddc-cff7-414c-9bec-45c9c9e22611")>, <selenium.webdriver.remote.webelement.WebElement (session="7792dee3dda6be18ea0d6894ce7884d9", element="40e4175a-2d8b-4bee-bada-8bbb71c886f3")>]

 确实没有发现“护照”,而select.select_by_visible_text(护照)表示通过可见文本选择选项,“护照”是我们可见的,所以成功运行。


总结

以上就是今天要讲的内容,本文仅仅简单介绍了Selenium的使用,后续我们再深入学习,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/53548.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python】Web学习笔记_flask(1)——getpost

flask提供的request请求对象可以实现获取url或表单中的字段值 GET请求 从URL中获取name、age两个参数 from flask import Flask,url_for,redirect,requestappFlask(__name__)app.route(/) def index():namerequest.args.get(name)agerequest.args.get(age)messagef姓名:{nam…

Electron逆向调试

复杂程序处理方式&#xff1a; 复杂方式通过 调用窗口 添加命令行参数 启动允许调用&#xff0c;就可以实现调试发布环境的electron程序。 断点调试分析程序的走向&#xff0c;程序基本上会有混淆代码处理&#xff0c; 需要调整代码格式&#xff0c;处理程序。

32.选择器

选择器 html部分 <div class"toggle-container"><input type"checkbox" id"good" class"toggle"><label for"good" class"label"><div class"ball"></div></label&…

Spring学习笔记之spring概述

文章目录 Spring介绍Spring8大模块Spring特点 Spring介绍 Spring是一个轻量级的控制反转和面向切面的容器框架 Spring最初的出现是为了解决EJB臃肿的设计&#xff0c;以及难以测试等问题。 Spring为了简化开发而生&#xff0c;让程序员只需关注核心业务的实现&#xff0c;尽…

flutter 导出iOS问题2

问题1:The Swift pod FirebaseCoreInternal depends upon GoogleUtilities, which does not define modules. To opt into those targets generating module maps (which is necessary to import them from Swift when building as static libraries) 参考 正如上图报错第三方…

Mybatis中where 1=1 浅析

在一些集成mybatis的工程中经常看到where11 的代码&#xff0c;也有同事问我&#xff0c;这样写有什么用&#xff0c;下面对其进行简单的分析记录一下。 1、场景 看下面这样一段xml中的代码 <select id"queryBook" parameterType"com.platform.entity.Book…

k8s webhook实例,java springboot程序实现 对Pod创建请求添加边车容器 ,模拟istio实现日志文件清理

k8s webhook实例&#xff0c;java springboot程序实现 对Pod创建请求添加边车容器 &#xff0c;模拟istio实现日志文件清理 大纲 背景与原理实现流程开发部署my-docker-demo-sp-user服务模拟业务项目开发部署my-sidecar服务模拟边车程序开发部署服务my-docker-demo-k8s-opera…

Django快速上手

Django简介 Django 框架最初的诞生&#xff0c;主要是用来开发和管理 Lawrence Publishing Group&#xff08;劳伦斯出版集团&#xff09;旗下新闻网站的一款软件&#xff0c;是一款属于 CMS&#xff08;Content Management System&#xff0c;内容管理系统&#xff09;类的软…

面试典中典之线程池的七大参数

文章目录 一、七大元素解释1.corePoolSize&#xff08;核心线程数&#xff09;&#xff1a;2.maximumPoolSize&#xff08;最大线程数&#xff09;&#xff1a;3.keepAliveTime&#xff08;线程空闲时间&#xff09;&#xff1a;4.unit&#xff08;时间单位&#xff09;&#x…

Python 进阶(六):文件读写(I/O)

❤️ 博客主页&#xff1a;水滴技术 &#x1f338; 订阅专栏&#xff1a;Python 入门核心技术 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac; 文章目录 1. 打开文件2. 读取文件2.1 逐行读取文件2.2 读取所有行 3. 写入文件3.1 向文件中写入…

开放麒麟1.0发布一个月后,到底怎么样?另一款操作系统引发热议

具有里程碑意义 7月5日&#xff0c;国产首个开源桌面操作系统“开放麒麟1.0”正式发布。 标志着我国拥有了操作系统组件自主选型、操作系统独立构建的能力&#xff0c;填补了我国在这一领域的空白。 举国欢庆&#xff0c;算的上是里程碑意义了&#xff01; 发布后用着如何&a…

回归预测 | MATLAB实现WOA-ELM鲸鱼算法优化极限学习机多输入单输出回归预测

回归预测 | MATLAB实现WOA-ELM鲸鱼算法优化极限学习机多输入单输出回归预测 目录 回归预测 | MATLAB实现WOA-ELM鲸鱼算法优化极限学习机多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现WOA-ELM鲸鱼算法优化极限学习机多输入回归预测&#…

2.获取DOM元素

获取DOM元素就是利用JS选择页面中的标签元素 2.1 根据CSS选择器来获取DOM元素(重点) 2.1.1选择匹配的第一个元素 语法: document.querySelector( css选择器 )参数: 包含一个或多个有效的CSS选择器 字符串 返回值: CSS选择器匹配的第一个元素&#xff0c;一个HTMLElement对象…

分享一个赛车动画

先看效果&#xff08;动画太大了放不上来&#xff0c;甘心去复制代码运行即可&#xff09;&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>赛车</title><…

一些网络知识总结(自用)

一些网络知识总结&#xff08;自用&#xff09; 1. 进制的转换 所有进制转换成十进制就是把字面值*权数 比如16进制 5AEF 转成10机制话就是 1* 151614321064 * 5 2. ip地址网段的概念&#xff0c;可用ip&#xff0c;广播地址 比如一个ip为10.1.1.1/24那么他的网络号就是前…

vue表单筛选

目录 筛选 HTML scss* filterComp 排序 表格 自定义数据样式 inner-table 分页 删除 default-modal 自定义元素的插槽-占位符 .search-wrap {height: 60px;display: flex;align-items: center;overflow: hidden;padding: 0 20px;.selected-options-wrap {flex: 1;.…

绝对定位的遮挡

<ul class"slide-nav leftfix"><li><!-- 一级菜单 --><a href"#">手机/运营商/数码</a><!-- 二级菜单 --><div class"second-menu"></div></li><li><a href"#">电…

TCP三次握手和四次挥手以及11种状态(二)

11种状态 1、一开始&#xff0c;建立连接之前服务器和客户端的状态都为CLOSED&#xff1b; 2、服务器创建socket后开始监听&#xff0c;变为LISTEN状态&#xff1b; 3、客户端请求建立连接&#xff0c;向服务器发送SYN报文&#xff0c;客户端的状态变味SYN_SENT&#xff1b; 4、…

操作系统_进程与线程(四)

目录 4. 死锁 4.1 死锁的概念 4.1.1 死锁的定义 4.1.2 死锁产生的原因 4.1.3 死锁的处理策略 4.2 死锁预防 4.3 死锁避免 4.3.1 系统安全状态 4.3.2 银行家算法 4.3.2.1 数据结构描述 4.3.2.2 银行家算法描述 4.3.2.3 安全性算法 4.3.3 安全性算法举例 4.3.4 银行…

【网络】应用层——HTTP协议

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《网络》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; &#x1f3c0;认识HTTP协议 上篇文章中&#xff0c;本喵带着大家对HTTP有了一个初步的认识&#xff0…