精华内容
下载资源
问答
  • 主要介绍了python模拟鼠标拖动操作的方法,实例分析了Python鼠标操作及键位操作的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • 在P-1.3中我成功地安装了PyUserInput模块现在我要学习如何使用它控制鼠标键盘 首先 from pymouse import PyMouse from pykeyboard import PyKeyboard 当我疑惑为什么要用from xxx import xxx时一个知乎答主解答...

    在P-1.3中我成功地安装了PyUserInput模块现在我要学习如何使用它控制鼠标键盘

    首先

    from pymouse import PyMouse
    from pykeyboard import PyKeyboard

    当我疑惑为什么要用from xxx import xxx时一个知乎答主解答了我的疑惑
    这里写图片描述
    真感谢你呀:>
    这里写图片描述
    的确,from random import randint之后可以直接使用randint指令而不用输入random.randint指令了。

    接下来建立一个鼠标和键盘的对象:

    m = PyMouse()
    k = PyKeyboard()

    (ok,不用特别输入pymouse.PyMouse了)
    And I’ve found out that I can replace an order with a “mark”, as follows:

    >>> m=print
    >>> m('a')
    a
    >>> m=random
    >>> m.randint(1,2)
    1
    >>> m=random.randint
    >>> m(1,2)
    2
    >>> m=random.randint(1,2)
    >>> m
    2
    >>> 

    Of course, I must note that:

    >>> print=random
    >>> print('Does it work?')
    Traceback (most recent call last):
      File "<pyshell#50>", line 1, in <module>
        print('Does it work?')
    TypeError: 'module' object is not callable
    >>> 

    Well, it doesn’t work anymore

    anyway

    快速学习新代码的方式之一是写一个小程序,程序如下:

    from pymouse import PyMouse
    import time
    m = PyMouse()
    (x,y)=m.position()#获取当前坐标的位置
    time.sleep(1)
    m.move(x,y)#鼠标移动到xy位置
    print (x,y)
    

    其中import time库使用time.sleep(x)函数是因为我希望让程序暂停一小段时间

    关于time.sleep:
    1) Note that using the function “time.sleep(x)”means that you must wait after you use the “KeyboardInterrupt” (Ctrl+C in IDLE),during the sleeping period.
    2) “让程序执行暂停指定的秒数,参数可以是浮点型以指定精确的时间,但是程序真正暂停的时间可能长于请求的时间也可能短于暂停的时间。”

    pykeyboard库也是类似的用法。Mouse与Keyboard的具体指令可以参照网络或者在IDLE中用自动完成功能(TAB键)一个个取出来尝试。

    下面写一个模拟鼠标拖动的小程序作为练习:

    from pymouse import PyMouse#import pymouse类
    from time import sleep#import time类
    from math import atan,pi,sin,cos#import一些数学函数和pi
    
    sgn = lambda x: 1 if x > 0 else -1 if x < 0 else 0
    #自定义函数lamdax(x1,x2...): lambdax1,x2... 等于y11,y12...(当[条件1]),而在[条件1]以外的情况下等于y21,y22...(当[条件2]),...,在[条件n]以外的情况下等于yn1,yn2...    ,必须在全集中有定义#
    non0 = lambda x:1/1e99 if x==0 else x#使0变成极为逼近0的量的函数
    #low10 = lambda x:10 if x>=10 else -10 if x <= -10 else x#最终没有用上的限制函数
    switch,x,y,xt,yt=1,0,0,0,0#发现可以在一行定义多个变量了
    m=PyMouse()
    #以下两行定义了目的坐标
    sleep(2)
    c=m.position()#c for coordinate
    
    while switch==1:
        c_=m.position()#获取目前的位置
        (x,y),(xt,yt)=c,c_#可以这样定义横纵坐标的大小
        d=(((xt-x)**2+(yt-y)**2)**0.25)
        #利用距离改变移动的幅度与方向精度(精度与幅度成正比,幅度越大,靠近目的坐标时越难settle,精度越小,消耗的路程越长。故需要精度与靠近程度成正比)
        #试了>1的指数配合low10函数,但这种函数变化太快了,效果不好
        dx,dy=sgn(xt-x),-sgn(yt-y)
        k=-(yt-y)/non0(xt-x)
        o_=0.5*(1-dx)*pi+atan(k)#此处我利用判断命令,制作了由(k,dx)到o_的映射,也是{x到arctan(x)函数向上延伸一个周期的隐函数图像}的"映射",由于此隐函数图像不对称,所以此函数的输出也不与k对称。而用arccosx可以得到一个对称的函数
        #其实这里只是我想建立x到一个隐函数图像的映射,所以我需要第三个条件变量
        xd,yd=cos(o_-pi),sin(o_-pi)#这是以鼠标位置为原点的(以屏幕为基准的)直角坐标系上指向目的坐标的方向向量。
    
        m.move(xt+(round(d*xd)),yt-(round(d*yd))) #在方向向量前乘一个系数再取整,得到本次移动的恰当像素数及方向
        sleep(0.01)#避免鼠标移动过快
    

    在这个小程序的基础上,可以做出一些有意思的拓展,如果再作出一些精简,可能非常实用

    1/9日批注:

    autopy3

    //autopy是一个自动化操作的python库,可以模拟一些鼠标、键盘事件,还能对屏幕进行访问

    Pillow

    //Pillow是PIL的一个派生分支,但如今已经发展成为比PIL本身更具活力的图像处理库。

    安装autopy3之前需要安装OpenGL和Libpng

    ===============================

    OpenGL pip安装就可以了 我就不多说了 我用的IDE是pycharm直接用IDE安装的

    Libpng的话安装稍微麻烦一点可以看下面这个帖子是MAC安装Libpng的例子!

    点击打开链接

    http://blog.csdn.net/u014017080/article/details/76116642

    ===============================

    import autopy3 as autopy,PIL  
    
    autopy.mouse.move(100, 100) # 移动鼠标  
    autopy.mouse.smooth_move(300, 300) # 平滑移动鼠标(上面那个是瞬间的)  
    
    autopy.mouse.click() # 单击  
    autopy.mouse.toggle(True) # 按下左键  
    autopy.mouse.toggle(False) # 松开左键  

    未经尝试,这是更简便的模拟拖动方法
    引用自网络

    展开全文
  • Python+Selenium自动化 模拟鼠标操作 在webdriver中,鼠标的一些操作如:双击、右击、悬停、拖动等都被封装在ActionChains类中,我们只用在需要使用的时候,导入这个类就可以了。 0.ActionChains类提供的...

    Python+Selenium自动化 模拟鼠标操作

     

    在webdriver中,鼠标的一些操作如:双击、右击、悬停、拖动等都被封装在ActionChains类中,我们只用在需要使用的时候,导入这个类就可以了。

    0.ActionChains类提供的鼠标常用方法:

    • perform():执行所有 ActionChains 中存储的行为。
    • context_click():右击
    • double_click():双击
    • drag_and_drop():拖到
    • move_to_element():鼠标悬停

    注意:

    • 使用之前需要引入 ActionChains 类。
    from selenium.webdriver.common.action_chains import ActionChains

    鼠标右击实例

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains  # 引入 ActionChains 类
    
    browser = webdriver.Chrome()
    browser.get('https://www.baidu.com')  
    
    
    # 定位到要右击的元素
    right_click = browser.find_element_by_link_text('新闻')
    
    # 对定位到的元素执行鼠标右键操作
    #ActionChains(driver):调用ActionChains()类,并将浏览器驱动browser作为参数传入
    #context_click(right_click):模拟鼠标双击,需要传入指定元素定位作为参数
    #perform():执行ActionChains()中储存的所有操作,可以看做是执行之前一系列的操作
    try:
        ActionChains(browser).context_click(right_click).perform()
        print('成功右击')
    except Exception as e:
        print('fail')
    #输出内容:成功双击

    注意:

    • ActionChains(driver):调用ActionChains()类,并将浏览器驱动browser作为参数传入
    • context_click(right_click):模拟鼠标双击,需要传入指定元素定位作为参数
    • perform():执行ActionChains()中储存的所有操作,可以看做是执行之前一系列的操作

    1.鼠标右击

    • context_click():右击
    #   鼠标右击
    # 定位到要右击的元素
    right_click  = browser.find_element_by_id("xx")
    
    # 对定位到的元素执行右击操作
    ActionChains(browser).move_to_element(right_click ).perform()

    2.鼠标双击

    • double_click():双击
    # 定位到要右击的元素
    double_click = browser.find_element_by_id('xx')
    
    # 对定位到的元素执行鼠标右键操作
    ActionChains(browser).context_click(double_click).perform()

    3.鼠标拖动

    • drag_and_drop(source,target):拖动
    • source:开始位置;需要拖动的元素
    • target:结束位置;拖到后需要放置的目的地元素
    # 开始位置:定位到元素的原位置
    source = driver.find_element_by_id("xx")
    
    # 结束位置:定位到元素要移动到的目标位置
    target = driver.find_element_by_id("xx")
    
    # 执行元素的拖放操作
    ActionChains(driver).drag_and_drop(source,target).perform()

    4.鼠标悬停

    • move_to_element():鼠标悬停
    # 定位到要悬停的元素
    move = driver.find_element_by_id("xx")
    
    # 对定位到的元素执行悬停操作
    ActionChains(driver).move_to_element(move).perform()
     
     

    转载于:https://www.cnblogs.com/xiao-xue-di/p/11531855.html

    展开全文
  • Python经典集粹

    2020-11-06 14:59:39
  • 接下来博主兴冲冲的找了几个有代码的博客,改了改就测试,但是结果无非就是网站不能正常访问啊,需要拖动验证之类的,还有的就是只有头尾两部分,总之没有看到想要的结果,看来大众点评这几年也在反爬虫上下了功夫。...

    *第二天是指写博客的第二天

    创作背景

    对于新手来说最快的学习方法就是看项目,在百度搜索python爬虫基本都是爬大众点评的,不知道这个网站做错了什么被这么多人爬。接下来博主兴冲冲的找了几个有代码的博客,改了改就测试,但是结果无非就是网站不能正常访问啊,需要拖动验证之类的,还有的就是只有头尾两部分,总之没有看到想要的结果,看来大众点评这几年也在反爬虫上下了功夫。但是博主就跟他杠上了,无奈水笔博主选择了用selenium包来模拟人为操作,从主界面开始。

    基本思路

    访问大众点评从主页开始,然后选择钟意分类,让driver打开大众点评主页,找到美食元素,ActionChains(driver)悬停,定位到日本菜ActionChains(driver)点击。

     这之后会出现一个新窗口,需要将driver定位到这个窗口。一位博主告诉我的,感谢他。

    代码运行过程中打开的窗口都可以通过driver获取,然后迭代定位。

    之后就是主要内容了,都在<li>标签中,通过driver找到所有<li>标签,然后迭代内容

    本页结束后,尝试寻找下一页标签,找到就点击,找不到就结束了。

    博主把爬取到的内容存在项目文件中,目录要准确。要在project文件夹建文件才行,否则会被认为配置文件放到你找不到的地方,博主的电脑太慢了,爬了一会壁纸都出来了,反正可以用,就不等了哈哈。一共爬了18页的,内容大家可以根据需要改。

    代码

    代码是博主东拼西凑➕删删改改的,不知道光顾了多少人的博客,我就不一一答谢了,希望能够帮到大家。如果那位大罗金仙飘过,一定要点化晚辈啊,感激不尽。

    # -*- coding:utf-8 -*-
    import re
    import time
    from bs4 import BeautifulSoup
    import json
    import threading
    from requests import Session
    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from bs4 import BeautifulSoup
    class dazp_bj:
    
    	def setUp(self):
    		# 调试的时候用firefox比较直观
    		# self.driver = webdriver.PhantomJS()
    		self.driver = webdriver.Firefox()
    		self.filename = 'D:\python\project\japanese.json' #储存位置
    	def testEle(self):
    		driver = self.driver
    		driver.maximize_window()
    		driver.get(r"http://www.dianping.com")#driver定位到主界面
    		attrible = driver.find_element_by_link_text("美食")
    		ActionChains(driver).move_to_element(attrible).perform()#鼠标悬停动作
    		time.sleep(1)                                       #防止被判定为机器
    		attrible = driver.find_element_by_link_text("日本菜")   #选择二级分类
    		ActionChains(driver).click(attrible).perform()
    		_json=dict()	#定义一个字典用以存储数
    		time.sleep(1)
    		current_window = driver.current_window_handle  # 获取当前窗口handle name
    		all_windows = driver.window_handles  # 获取所有窗口handle name
    		# 切换window,如果window不是当前window,则切换到该window
    		for window in all_windows:
    			if window != current_window:
    				driver.switch_to.window(window)
    		print driver.title  # 打印该页面title
    		time.sleep(10)     #等待页面完全加载,否则数据不全,可根据电脑配置改变
    
    		while True:    #while if 模仿 都while
    			soup = BeautifulSoup(driver.page_source, 'lxml') #获取当前页面全部内容
    			name=['商家名称','评论数量','人均消费','地址','评分','链接']
    			for li in soup.find('div',class_="shop-wrap").find('div',id="shop-all-list").ul.find_all('li'): #迭代商家
    				info=li.find('div',class_='txt')
    				_json[name[0]]=info.find('div',class_='tit').a.h4.get_text().encode('utf-8')
    				_json[name[1]]=int(info.find('div',class_='comment').find('a',class_="review-num").b.get_text().encode('utf-8'))
    				_json[name[2]]=int(re.sub('¥','',info.find('div',class_='comment').find('a',class_="mean-price").b.get_text().encode('utf-8')))
    				_json[name[3]]=info.find('div',class_='tag-addr').find('span',class_='tag').get_text().encode('utf-8')+info.find('div',class_='tag-addr').find('span',class_='addr').get_text().encode('utf-8')
    				_json[name[4]]=float(info.find('span',class_='comment-list').find_all('b')[0].get_text())+float(info.find('span',class_='comment-list').find_all('b')[1].get_text())+float(info.find('span',class_='comment-list').find_all('b')[2].get_text())
    				_json[name[5]]=info.find('div',class_='tit').a['href']
    				with open(self.filename,'a') as outfile:  #追加模式
    					json.dump(_json,outfile,ensure_ascii=False)
    				with open(self.filename,'a') as outfile:
    					outfile.write(',\n')
    			if driver.find_element_by_css_selector("a[class= \"next\"][title=\"下一页\"]"):  #css选择器查找
    				driver.find_element_by_css_selector("a[class= \"next\"][title=\"下一页\"]").click()
    				time.sleep(10)
    				continue
    			elif driver.find_element_by_link_text("下一页"):   #text查找
    				driver.find_element_by_link_text("下一页").click()
    				time.sleep(10)
    				continue
    			else:
    				break
    if __name__=='__main__':
    	a = dazp_bj()
    	a.setUp()
    	a.testEle()

    *爬虫的过程中不要动鼠标,最好将光标放到边缘。

     有问题留言,我尽力帮助

    更多机会与学习资料加入下方QQ群

    展开全文
  • 通过click()来模拟鼠标的单击操作,鼠标还具有鼠标右击,双击,悬停甚至鼠标拖动等功能。在webdriver中,将这些鼠标操作方法封装在ActionChains类提供。 ActionChains类提供鼠标的常用方法: 1)perform():...
  • 在webdriver中,鼠标的一些操作如:双击、右击、悬停、拖动等都被封装在ActionChains类中,我们只用在需要使用的时候,导入这个类就可以了。 0.ActionChains类提供的鼠标常用方法: perform():执行所有 ...
  • 当然,对于鼠标事件中,我们熟悉的还有:右击、双击、悬停、拖动 等功能。在WebDriver中,是将这些关于鼠标操作的方法封装在ActionChains类中了。 ActionChains类提供了以下鼠标相关操作方法: pe...
  • 除了可以使用 click( ) 来模拟鼠标的单击操作,现在Web产品中还提供了更丰富的鼠标交互方式,例如鼠标右键、双击、悬停、拖动等功能,在WebDriver中,将这些关于鼠标操作的方法都封装在 ActionChains 类中。...
  • python+selenium 鼠标事件操作

    千次阅读 2018-06-13 15:01:14
    一、前言 除了可以使用 click( ) 来模拟鼠标的单击操作,现在Web产品中还提供了更丰富的鼠标交互方式,例如鼠标右键、双击、悬停、拖动等功能,在WebDriver中,将这些关于鼠标操作的方法都封装在 ActionChains 类中...
  • 本文介绍了Python中Selenium模拟JQuery滑动解锁实例,分享给大家,也给自己留个笔记 滑动解锁一直做UI自动化的难点之一,我补一篇滑动解锁的例子,希望能给初做Web UI自动化测试的同学一些思路。 首先先看个例子。 ...
  • # 每个模拟事件后需加.perform() 才会执行 # context_click() 右击 # double_click() 双击 # drag_and_drop(source, target) 拖动 # move_to_element() 鼠标悬停 # move_to 移动 from selenium import webdriver...
  • # 1、鼠标事件:# 每个模拟事件后需加.perform() 才会执行# context_click() 右击# double_click() 双击# drag_and_drop(source, target) 拖动# move_to_element() 鼠标悬停# move_to 移动from selenium import...
  • 前面例子中我们已经学习到可以用 click() 来模拟鼠标的单击操作,而我们在实际的 web 项目测试中发现,有关鼠标的操作,不单单只有单击,有时候还会用到右击、双击、拖动等操作,这些操作包含在ActionChains 类中。...
  • 首先需要考虑的是如何通过Python模拟鼠标操作。在此我货比三家: module stars latest commit Pyuserinput 903 2016.2.26 mouse 274 2020.1.2 PyAutoGUI 3600 2020.1.14 对比后,我们选用PyAutoGUI。 ...
  • 1. selenium鼠标、键盘操作 ActionChains类中封装了对 鼠标事件 ... 此方法模拟鼠标拖动效果 move_to_element() 悬停 --> 此方法模拟鼠标悬停效果 perform() 执行 --> 此方法用来执行封装在ActionChains的行为
  • (2)使用 ActionChains 控制鼠标操作(鼠标按住—鼠标拖动—鼠标释放) (3)使用物理知识(加速度)模拟人的拖动轨迹(先加速后减速) 代码实现: 步骤一:进入首页,点击密码登录 代码: from selenium import ...

空空如也

空空如也

1 2
收藏数 37
精华内容 14
关键字:

python模拟鼠标拖动

python 订阅