selenium中需要使用的知识
- 1、ActionChains,用于模拟鼠标移动的类吧。。。好像是这样说的
- 2、Chromeoptions(),好像也是一个类。。。
1、ActionChains,用于模拟鼠标移动的类吧。。。好像是这样说的
我写这个简短的代码的初衷是偷懒,因为每天有在固定的时间收取邮件然后发送的需求,不过我知道能实现这个效果的方法肯定不止python,一些邮件工具也阔以的,不过本人喜欢python,所以想自己试试。也把自己的一些想法记录一下。
总体思路就是:自动登录邮箱,然后把今天的邮箱附件下载到指定路径,然后拟通过微信或者其他社交软件发给指定某个人(这一步暂时没实现哈哈哈哈哈)
其中一个点就是邮箱的附件下载按钮需要你的鼠标移动到文件位置才能显示,如下图:
一开始我以为需要使用pyhook3来进行模拟鼠标,发现安装pyhook3贼麻烦,虽然我也成功安装了,但是没用到。。。。尴尬。然刚好我有在哔哩哔哩看selenium的视频学习,刚好有一课讲到了ActionChains的简单讲解,但是也够了。
具体就是:
from selenium.webdriver.common.action_chains import ActionChains #导入ActionChains,这个东东,这里需要非常注意的是,ActionChains,是区分大小写的!!,一定要严格按照上述要求写哈。
ac = ActionChains(driver)#理解就是,driver的含义是调用了一个裸的浏览器,然后把这个浏览器的行为链调用集成一个对象吧,好像是这样理解吧
moving = ac.move_to_element(这里不需要引号,放入找寻位置的语句,例如:driver.find_elemenet_by_id('kw'))
moving.perform()#记得加.perform()
#以上代码只是移动哈,没有单机,双击,右键等等
很多人说python不用记代码,需要的时候上网找就行了,不过我会去记忆,像这么长的。。。虽然也是大白话,我也是找翻译的哈哈哈哈
看到一篇文章的解释:就是将人对电脑行为动作一个一个排列起来,像一条直的链子,然后呢使用.perforn(),它们就会一个一个执行,然后前面的selenium.webdriver.common.action_chains,这个比较麻烦,共同体的行动链。。。可能common.action_chains不止一个ActionChains吧
最后就是出现那个下载按钮,使用F12,然后用by_css_selector定位下载按钮,click(),就可以完成下载啦。
ActionChains的其他方法列表:
click(on_element=None) ——单击鼠标左键
click_and_hold(on_element=None) ——点击鼠标左键,不松开
context_click(on_element=None) ——点击鼠标右键
double_click(on_element=None) ——双击鼠标左键
drag_and_drop(source, target) ——拖拽到某个元素然后松开
drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开
key_down(value, element=None) ——按下某个键盘上的键
key_up(value, element=None) ——松开某个键
move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标
move_to_element(to_element) ——鼠标移动到某个元素
move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左上角坐标)多少距离的位置
perform() ——执行链中的所有动作
release(on_element=None) ——在某个元素位置松开鼠标左键
send_keys(*keys_to_send) ——发送某个键到当前焦点的元素
send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素
2、Chromeoptions(),好像也是一个类。。。
这个主要是用来实现把下载文件保存到指定路径的。
ChromeOptions(),中文含义:谷歌选项。。。。。硬翻译,请注意,这个Chromeoptions中的C也是大写的。具体写法如下:
options1 = webdriver.Chromeoptions()#括号一定要家伙要加上去,不然会出现:TypeError: add_experimental_option() missing 1 required positional argument: 'value' 这个错误。含义就是:给webdriver这个裸体的浏览器加上“衣服”。
chromeoption = {'profile.default_content_setting.popups':0,'download.default_directory': 'D:\\'} #设置你想要赋予裸浏览器的参数,也就是“衣服”的颜色啊,尺寸等参数
options1.add_experimental_option('chromeoptions',chromeoptions)#然后利用add_experimental_option把有参数的“衣服”穿上,所以options1就不算是“裸浏览器”了
driver = webdriver(r'你的chromedriver.exe存放的路径',options = chromeoption)#将具有“衣服”的浏览器赋予到新的对象,在有参数的浏览器下实现get()啊,find_element等操作。
以上代码的解释就是:
chromeoption = {‘profile.default_content_setting.popups’:0,‘download.default_directory’: ‘D:\’} 这是设置参数,
profile.default_content_setting.popups’:0,0的意思是禁止弹窗,也就是不让浏览器弹出下载的窗口,
download.default_directory,默认下载路径设置成D:\,一定是双斜杠。
我尝试过用firefox设置上面的自动下载到指定位置,不过那个弹窗的问题一直解决不了,尤其是要设置下载文件的文件类型,特别麻烦,我会另外做分享
options1.add_experimental_option(‘chromeoptions’,chromeoptions),给裸体浏览器加上上述的禁止弹窗和指定下载路径的属性参数,options1.还有其他功能,放在下面
driver = webdriver(r’你的chromedriver.exe存放的路径’,options = chromeoption),相当于初始化浏览器。
chromeoptions是放在调用chromedriver.exe前的
而ActionChains是放在之后。
chromeoptions的其他配置:
#options = webdriver.ChromeOptions()
#窗体最大化
#options.add_argument(‘start-maximized‘)
#无头模式
#options.add_argument(‘–headless‘)
#去掉开发者警告
options.add_experimental_option(‘useAutomationExtension‘,False)
#去掉黄条
#options.add_experimental_option(‘name‘,value),添加参数的姓名和具体设置
对了我的电脑配置:
python 3.8.3
系统:win 10
IDE:pycharm,库用的是集成anconda
Chrome.87.0428
selenium 3.1.4.1
纯粹分享记录哈,勿喷。