selenium: 鼠标右键点击、双击、移动鼠标到某个元素、鼠标拖拽_selenium移动鼠标到元素_joy_oc的博客-程序员秘密

技术标签: python  selenium  

通过 Selenium 提供的 ActionChains 类来实现

from selenium import webdriver

driver = webdriver.Chrome(r'f:\chromedriver.exe')

driver.implicitly_wait(5)

driver.get('https://www.baidu.com/')

from selenium.webdriver.common.action_chains import ActionChains

ac = ActionChains(driver)

# 鼠标移动到 元素上

ac.move_to_element( driver.find_element_by_css_selector('[name="tj_briicon"]') ).perform()

或者代码:

element = bro.find_element_by_xpath('//*/div[@class="ui-page"]/a[@clstag="shangpin|keycount|product|pinglunfanye-nextpage"]')

webdriver.ActionChains(bro).move_to_element(element).click(element).perform()

直接执行javascript

# 直接执行 javascript,里面可以直接用return返回我们需要的数据

nextPageButtonDisabled = driver.execute_script( ''' ele = document.querySelector('.soupager > button:last-of-type'); return ele.getAttribute('disabled') ''')

# 返回的数据转化为Python中的数据对象进行后续处理

if nextPageButtonDisabled == 'disabled':  # 是最后一页

        return True

else: # 不是最后一页

        return False

冻结界面

在 开发者工具栏 console 里面执行如下js代码

setTimeout(function(){debugger}, 5000)

表示在 5000毫秒后,执行 debugger 命令,执行该命令会 浏览器会进入debug状态。 debug状态有个特性, 界面被冻住, 不管我们怎么点击界面都不会触发事件。

弹出对话框

三种类型: Alert(警告信息)、confirm(确认信息)和prompt(提示输入)

Alert(警告信息)

from selenium import webdriver

driver = webdriver.Chrome()

driver.implicitly_wait(5)

driver.get('http://cdn1.python3.vip/files/selenium/test4.html')

# --- alert ---

driver.find_element_by_id('b1').click()

# 打印 弹出框 提示信息

print(driver.switch_to.alert.text)

# 点击 OK 按钮

driver.switch_to.alert.accept()

confirm(确认信息)

from selenium import webdriver

driver = webdriver.Chrome()

driver.implicitly_wait(5)

driver.get('http://cdn1.python3.vip/files/selenium/test4.html')

# --- confirm ---

driver.find_element_by_id('b2').click()

# 打印 弹出框 提示信息

print(driver.switch_to.alert.text)

# 点击 OK 按钮

driver.switch_to.alert.accept()

driver.find_element_by_id('b2').click()

# 点击 取消 按钮

driver.switch_to.alert.dismiss()

prompt(提示输入)

from selenium import webdriver

driver = webdriver.Chrome()

driver.implicitly_wait(5)

driver.get('http://cdn1.python3.vip/files/selenium/test4.html')

# --- prompt ---

driver.find_element_by_id('b3').click()

# 获取 alert 对象

alert = driver.switch_to.alert

# 打印 弹出框 提示信息 print(alert.text)

# 输入信息,并且点击 OK 按钮 提交

alert.send_keys('web自动化 - selenium')

alert.accept()

# 点击 Cancel 按钮 取消

driver.find_element_by_id('b3').click()

alert = driver.switch_to.alert

alert.dismiss()

窗口大小

获取窗口大小

driver.get_window_size()

改变窗口大小

driver.set_window_size(x, y)

获取当前窗口标题

from selenium import webdriver

driver = webdriver.Chrome()

driver.implicitly_wait(5)

# 打开网站

driver.get('https://www.163.com')

# 获取网站标题栏文本

print(driver.title)

# 获取网站地址栏文本

print(driver.current_url)

截屏

from selenium import webdriver

driver = webdriver.Chrome()

driver.implicitly_wait(5)

# 打开网站

driver.get('https://www.baidu.com/')

# 截屏保存为图片文件

driver.get_screenshot_as_file('1.png')

手机模式

我们可以通过 desired_capabilities 参数,指定以手机模式打开chrome浏览器

from selenium import webdriver

mobile_emulation = { "deviceName": "Nexus 5" }

chrome_options = webdriver.ChromeOptions()

chrome_options.add_experimental_option("mobileEmulation", mobile_emulation)

driver = webdriver.Chrome( desired_capabilities = chrome_options.to_capabilities())

driver.get('http://www.baidu.com')

input()

driver.quit()

上传文件

在线图片压缩网站: https://tinypng.com/

网站页面上传文件的功能,是通过 type 属性 为 file 的 HTML input 元素实现的

<input type="file" multiple="multiple">定位到该input元素,然后通过 send_keys 方法传入要上传的文件路径即可

# 先定位到上传文件的 input 元素

ele = wd.find_element_by_css_selector('input[type=file]')

# 再调用 WebElement 对象的 send_keys 方法

ele.send_keys(r'h:\g02.png')

上传多个文件,可以多次调用send_keys

ele = wd.find_element_by_css_selector('input[type=file]')

ele.send_keys(r'h:\g01.png')

ele.send_keys(r'h:\g02.png')

有的网页上传,是没有 file 类型 的 input 元素的。如果是Windows上的自动化,可以采用 Windows 平台专用的方法:

pip install pypiwin32 

确保 pywin32 已经安装

# 找到点击上传的元素,点击

driver.find_element_by_css_selector('.dropzone').click()

sleep(2)

# 等待上传选择文件对话框打开

# 直接发送键盘消息给 当前应用程序,

# 前提是浏览器必须是当前应用

import win32com.client

shell = win32com.client.Dispatch("WScript.Shell")

# 输入文件路径,最后的'\n',表示回车确定,也可能时 '\r' 或者 '\r\n'

shell.Sendkeys(r"h:\a2.png" + '\n')

sleep(1)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/joy_oc/article/details/120132347

智能推荐

cordova+vue使用插件cordova-plugin-qrscanner自定义扫码页面_没错就是我哎呀的博客-程序员秘密

原文地址声明:https://blog.csdn.net/qq_23179075/article/details/99627909进入vue项目,安装cordova plugin add cordova-plugin-qrscanner修改后的页面&lt;template&gt; &lt;div&gt; &lt;van-nav-bar left-arrow title="二维码扫描" safe-area-inset-top @click

QTP11.5(HP UFT 11.5)下载地址_TIB的博客-程序员秘密

QTP11.5(HP UFT 11.5)下载地址http://automationqa.com/forum.php?mod=viewthread&tid=1380&fromuid=29

ry / node_chat源码阅读_macyang的博客-程序员秘密

通过阅读一个小的nodeJS project来学习nodeJS是一个不错的注意,而ry/node_chat代码相当精巧,而且贴近我们日常场景,所以选择它来开始我的nodeJS project源码阅读:ry/node_chat的代码结构如下:我会主要分析服务器端的两个nodeJS文件,fu.js和server.js,而client.js涉及的部分只是为了帮助理解server.js的逻辑。 fu.js的源代码分析(汉字注释部分是我添加的内容)// 通过require引用http, fs, sys, url对象或

运行《tensorflow21天》的warning_guxue365的博客-程序员秘密

在运行第一章的时候所出现得提示信息[email protected]:~/software/AI/chapter_1$ python download.pyWARNING:tensorflow:From download.py:5: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprec...

python写后端提供api_python写后端api_weixin_39910824的博客-程序员秘密

有没有大神分享一个纯python无框架写的webapi后端...python自学完了,想写个api练练手,CSS布局HTML小编今天和大家分享个案例代码来借鉴借鉴精华你可能有误解,无框架要比使用框架复杂的多。 你刚学完,应该是先试试简单的框架。python怎么响应后端发送get,post请CSS布局HTML小编今天和大家分享的接口测试用CGI,名字为test.py,放在apache的cgi-bin...

随便推点

关于ARP、MAC、IP欺骗以及TCP劫持_mac ip劫持_sdulibh的博客-程序员秘密

三个多月没更新博客,期间也有在学习和总结一些东西,只是或多或少都涉及到公司相关的信息(业务,JVM,WebServer)所以不便写出来,有时候写到一半发现又不太合适然后删除,很郁闷。之前一直比较关注web安全层面,如SQL注入、XSS、CSRF等等 ,然后HTTP协议层面,如HTTP Slowloris ,逐渐接触应用层以下(OSI七层模型)的东西,比如TCP SYN Flood相关。

VS2010配置使用OpenMP_vs2010 openmp_遥感服务的博客-程序员秘密

一个简单的OpenMP例子       首先启动VisualStudio 2010,新建一个C++的控制台应用程序,如下图所示:       然后在项目解决方案资源管理器上选择项目名称,点击右键,选择“属性”,如下图所示:       然后在属性页上左侧选择“配置属性”——“C/C++”——“语言”,然后在右侧“OpenMP支持”后选

JSP JSP工作原理 JSP语法 JSP声明 JSP注释 JSP指令 jsp九大隐式/内置对象_weixin_30675967的博客-程序员秘密

1 什么是JSP 1)为什么说,Servlet是一个动态Web开发技术呢? Servlet是基于服务端的一种动态交互技术, HttpServletRequest表示客户端到服务端的对象 HttpServletResponse表示服务端到客户端的对象 2)JSP是SUN公司开发的一个基于服务端的一种动态WEB开发技术 3)J...

poj 1664 放苹果_China震震的博客-程序员秘密

总时间限制: 1000ms 内存限制: 65536kB描述把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。输入第一行是测试数据的数目t(0 输出对输入的每组数据M和N,用一行输出相应的K。样例输入17 3样例输出8来源[email protected]代码:#include #include

利用MCS-51系列单片机和0038模块实现红外线解码_lf0038b红外解码单片机_happyw2004的博客-程序员秘密

<br />本程序利用MCS51单片机实现了红外线解码,该程序我亲自测试过,实现了对电视机遥控板信号的解码。并应用上位机实现了对电脑鼠标的遥控。由于有一部分代码是汇编,一部分是C,所以需要在工程中进行设置,由于有很久了,我也忘记怎么设置了,本想上传整个工程文件的,结果好象在这里上传不了,需要的请留EMAIL,我发过去。否则可以自己在网上收一下C和汇编混合编程的设置。<br /> <br />/*************晶体为11.0592M,波特率9600bps<br />***************学习

HDU5246 超级赛亚ACMer 贪心_AC_Gibson的博客-程序员秘密

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5246分析:贪心思想。我们先把每个挑战者按战斗力升序排序,然后找出离m最近的小于m的挑战者的战斗力x,赋初值cnt=x,并纪录该挑战者的下标tmp,然后从i=tmp开始遍历,对于后面的每一个挑战者,其战斗力为a[i],如果cnt+k0时k--,直至遍历所以的挑战者,如果flag的值为true

推荐文章

热门文章

相关标签