Selenium刚玩一会儿,就感受了私人秘书的体验
学习python的过程中,少不了接触第三方库,毕竟作为胶水语言python的强大之处也就是第三方库体量庞大,无疑大大增强了python的战斗力。
有时候想完成网页自动化操作,这时候Selenium进入了我的世界。从获悉它是用来控制浏览器完成自动化任务这一属性以后,就如痴如醉的开始从官网和百度教程涉猎它的用法。
玩了一天,目前学会了自动打开浏览器,然后输入指定的网址,接着最大化。随后发现它还可以进行键鼠操作,这让我想到了打开电脑,启动python,自动登录腾讯视频账号。
说干就干,马上动手,不知道会有怎样的惊喜?
流程一:启动浏览器,然后最大化
首先安装Selenium库在你的本地环境,前提是安装了Python。我用的是python3.9.1在我其他文章可以看到安装教程。
打开cmd,然后使用pip(包管理软件)进行安装,输入如下命令:
pip install selenium

像我这样已经安装完成。
不同的浏览器要下载不同的驱动,我用的是谷歌,所以在
谷歌驱动官方下载地址:
https://chromedriver.storage.googleapis.com/index.html
下载好的驱动放在python安装目录下就行,然后在python里引用selenium的chrome,像这样:
from selenium.webdriver import Chrome
然后打开调用浏览器,像这样:
driver = Chrome()
接着测试一下能否打开浏览器。

好的,环境一切就绪。现在可以按照官网的教程开始操作了。
selenium官方中文文档
https://www.selenium.dev/documentation/zh-cn/
最大化命令如下:
driver.maximize_window()
流程二:登录腾讯视频,然后最大化
get命令用于打开网址,接下来,我们打开腾讯视频:
driver.get(''https://v.qq.com/)
既然是看电影,没有会员怎么行,这就需要登录了。由于selenium可以操作键盘和鼠标,所以我们登录的输入和点击都可以完成。
那么点击命令是在寻找到节点的情况下使用click(),而寻找的过程类似解析HTML的文档树,方法很多,可以通过id,classname,css selector等等,但我觉得这个最好用:xpath。而寻找的过程需要一定的前端基础,这里直接放代码,点击打开登录框:
driver.find_element_by_xpath("//div[@id='mod_head_user']").click()
虽然我觉得隐式等待可以提一下,但是我的千兆宽带觉得用不上。大家感兴趣的可以了解一下:implicitly_wait

同样的道理,我们点击QQ登录。

我电脑登录了qq,所以自然就出来了,再次执行点击命令就可完成登录。如果没有登录qq的朋友可以,切换到账号密码登录,操作方法和上面差不多,都是属于点击命令,这里就不赘述。
不过这里要给大家说一个概念,叫iframe,这个登录窗口是一个iframe页面,也就是内嵌网页。我们直接使用上述的命令无法点击,需要切换到frame里才能操作。怎么切换呢?命令如下:
经过测试,腾讯视频登录按钮内嵌了两层iframe,所以需要依次切换,像这样:
driver.switch_to.frame('_login_frame_quick_') driver.switch_to.frame('ptlogin_iframe')
然后点击即可,至此已经完成了登录操作:
driver.find_element_by_xpath("//span[@id='img_out_1667650021']").click()
当然selenium的神奇之处远不止于此,后续将继续研究记录。
零基础学Java或Python的兄弟姐妹,资料干货尽在我的公众号:lunvey
Selenium刚玩一会儿,就感受了私人秘书的体验的更多相关文章
- 给刚玩Hadoop的朋友一些建议
随着两会中间央视新闻天天说大数据,很多人纷纷开始关注大数据和Hadoop以及数据挖掘和数据可视化了,我现在创业,遇到很多传统数据行业往Hadoop上面去转型的公司和个人,提了很多问题,大多数问题还都是 ...
- selenium之 玩转鼠标键盘操作(ActionChains)
用selenium做自动化,有时候会遇到需要模拟鼠标操作才能进行的情况,比如单击.双击.点击鼠标右键.拖拽等等.而selenium给我们提供了一个类来处理这类事件——ActionChains sele ...
- [python / selenium] - 用python刷公选课是一种什么体验?
前言 看公选课还是能学到很多知识的,这里是给大家提供一个selenium的使用思路(好好学公选课,我真的看了) 思路 当观看者移动鼠标到某一范围时就会停止播放,就让selenium一直将鼠标悬停在视频 ...
- 玩转Libmodbus(二) 写代码体验
libmodbus在线文档 https://www.jianshu.com/p/d93c17485c0a 原创篇 参考上一篇转载的博客,我的ubuntu上的最终生成的动态库的路径,下图所示 我的lin ...
- selenium webdriver学习(一)------------快速开始(转载JARVI)
selenium webdriver学习(一)------------快速开始 博客分类: Selenium-webdriver selenium webdriver 学习 selenium webd ...
- words2
餐具:coffee pot 咖啡壶coffee cup 咖啡杯paper towel 纸巾napkin 餐巾table cloth 桌布tea -pot 茶壶tea set 茶具tea tray 茶盘 ...
- [Mac A]为什么国外程序员爱用 Mac?
from http://www.vpsee.com/2009/06/why-programmers-love-mac/ Mac 在国外很受欢迎,尤其是在 设计/web开发/IT 人员圈子里.普通用户喜 ...
- [转] [腾讯游戏学院] Roguelike到底是什么?
如果你是一位资深游戏玩家,那么最近你肯定在哪里看到过 Roguelike 这个词.Roguelike 这个古老的游戏类型现在又变得很潮流,其中各种要素都在不断的被新游戏借鉴.作为一名就是比你有更多空余 ...
- [No000025]停止自嘲—IT 技术人必须思考的 15 个问题
行内的人自嘲是程序猿.屌丝和码农,行外的人也经常拿IT人调侃,那么究竟是IT人没有价值,还是没有仔细思考过自身的价值? 1.搞 IT 的是屌丝.码农.程序猿? 人们提到IT人的时候,总会想到他们呆板. ...
随机推荐
- 【EXPDP】Oracle expdp中并行问题
$ expdp hr/hr tables=test1 dumpfile=test2.dmp directory=pump parallel=4 Export: Release 11.2.0.4.0 - ...
- Linux echo和cat和grep和tr的基础用法
Linux vim 搜索 echo : 显示输出功能 echo oldboy>1.txtx cat 1.txtx > 重定向 文件内容覆盖 >> 追加重定向 ...
- ctfhub技能树—sql注入—Cookie注入
手注 打开靶机 查看页面信息 查找cookie 测试是否为cookie注入 抓包 尝试注入 成功查询到数据库名 查询表名 查询字段名 查询字段信息 成功拿到flag sqlmap 查询数据库名 pyt ...
- 基于Dockfile构建JAVA环境网站镜像
查看本地目录 [root@docker tomcat]# ls apache-tomcat-8.5.16.tar.gz Dockerfile jdk-8u91-linux-x64.tar.gz ...
- 与图论的邂逅05:最近公共祖先LCA
什么是LCA? 祖先链 对于一棵树T,若它的根节点是r,对于任意一个树上的节点x,从r走到x的路径是唯一的(显然),那么这条路径上的点都是并且只有这些点是x的祖先.这些点组成的链(或者说路径)就是x的 ...
- JS中常用的工具类
一.日期工具类 /** * 日期时间工具类 * @type {{dateFormat}} */ var DateTime = function () { var patterns = { PATTER ...
- Bagging和Boosting的介绍及对比
"团结就是力量"这句老话很好地表达了机器学习领域中强大「集成方法」的基本思想.总的来说,许多机器学习竞赛(包括 Kaggle)中最优秀的解决方案所采用的集成方法都建立在一个这样的假 ...
- JavaScript中创建数组的方式!
JavaScript中创建数组的方式! 利用数组字面量 // 1 直接量 console.log(Array.prototype); var arr = [1, 2, 4, 87432]; // 注意 ...
- XShell的手动直连,避免配置ssh免密的一些问题
- 给定HDFS中某一个目录,输出该目录下的所有文件的读写权限、大小、创建时间、路径等信息,如果该文件是目录,则递归输出该目录下所有文件相关信息。
1 import java.text.SimpleDateFormat; 2 import org.apache.hadoop.fs.*; 3 4 public class E_RecursiveRe ...