9、 框处理
9.1 警告框处理
9.2 下拉框选择
9.2.1 Select类的方法
9.2.1.1 选中方法
9.2.1.2 取消选择方法
9.2.2 先定位select 然后在定位option
9.2.3 直接通过xpath层级标签定位
10、 文件上传
11、 cookie操作
11.1 cookie 登录方法
12、 调用JS代码
13、 窗口截图
13.1 截取验证码图片案例
14、 关闭浏览器
selenium 基础语法
=============
一、 环境配置
=======
1、 安装环境
=======
安装 selenium 第三方库
pip install selenium
下载浏览器驱动:
-
Firefox浏览器驱动: geckodriver
-
Chrome浏览器驱动: chromedriver , taobao备用地址
-
IE浏览器驱动: IEDriverServer
-
Edge浏览器驱动: MicrosoftWebDriver
-
Opera浏览器驱动: operadriver
-
PhantomJS浏览器驱动: phantomjs
需要把这些浏览器驱动放入 Python 应用目录里面的 Script 文件夹里面
干货主要有:
======
① 200 多本 Python 电子书(和经典的书籍)应该有
② Python标准库资料(最全中文版)
③ 项目源码(四五十个有趣且可靠的练手项目及源码)
④ Python基础入门、爬虫、网络开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
Python学习交流Q群101677771
2、 配置参数
=======
每次当selenium启动chrome浏览器的时候,chrome浏览器很干净,没有插件、没有收藏、没有历史记录,这是因为selenium在启动chrome时为了保证最快的运行效率,启动了一个裸浏览器,这就是为什么需要配置参数的原因,但是有些时候我们需要的不仅是一个裸浏览器
selenium启动配置参数接收是ChromeOptions类,创建方式如下 :
from selenium import webdriver
option = webdriver.ChromeOptions()
driver = webdriver.Chrome(chrome_options=option)
创建了ChromeOptions类之后就是添加参数,添加参数有几个特定的方法,分别对应添加不同类型的配置项目
from selenium import webdriver
option = webdriver.ChromeOptions()
添加启动参数
option.add_argument()
添加扩展应用
option.add_extension()
option.add_encoded_extension()
添加实验性质的设置参数
option.add_experimental_option()
设置调试器地址
option.debugger_address()
常用配置参数:
from selenium import webdriver
option = webdriver.ChromeOptions()
添加UA
options.add_argument(‘user-agent=“MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1”’)
指定浏览器分辨率
options.add_argument(‘window-size=1920x3000’)
谷歌文档提到需要加上这个属性来规避bug
chrome_options.add_argument(‘–disable-gpu’)
隐藏滚动条, 应对一些特殊页面
options.add_argument(‘–hide-scrollbars’)
不加载图片, 提升速度
options.add_argument(‘blink-settings=imagesEnabled=false’)
浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
options.add_argument(‘–headless’)
以最高权限运行
options.add_argument(‘–no-sandbox’)
手动指定使用的浏览器位置
options.binary_location = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
#添加crx插件
option.add_extension(‘d:\crx\AdBlock_v2.17.crx’)
禁用JavaScript
option.add_argument(“–disable-javascript”)
设置开发者模式启动,该模式下webdriver属性为正常值
options.add_experimental_option(‘excludeSwitches’, [‘enable-automation’])
禁用浏览器弹窗
prefs = {
‘profile.default_content_setting_values’ : {
‘notifications’ : 2
}
}
options.add_experimental_option(‘prefs’,prefs)
添加代理 ip
options.add_argument(“–proxy-server=http://XXXXX.com:80”)
driver = webdriver.Chrome(chrome_options=chrome_options)
其他配置项目参数
–user-data-dir=”[PATH]”
指定用户文件夹User Data路径,可以把书签这样的用户数据保存在系统分区以外的分区
–disk-cache-dir=”[PATH]“
指定缓存Cache路径
–disk-cache-size=
指定Cache大小,单位Byte
–first run
重置到初始状态,第一次运行
–incognito
隐身模式启动
–disable-javascript
禁用Javascript
–omnibox-popup-count=“num”
将地址栏弹出的提示菜单数量改为num个
–user-agent=“xxxxxxxx”
修改HTTP请求头部的Agent字符串,可以通过about:version页面查看修改效果
–disable-plugins
禁止加载所有插件,可以增加速度。可以通过about:plugins页面查看效果
–disable-javascript
禁用JavaScript,如果觉得速度慢在加上这个
–disable-java
禁用java
–start-maximized
启动就最大化
–no-sandbox
取消沙盒模式
–single-process
单进程运行
–process-per-tab
每个标签使用单独进程
–process-per-site
每个站点使用单独进程
–in-process-plugins
插件不启用单独进程
–disable-popup-blocking
禁用弹出拦截
–disable-plugins
禁用插件
–disable-images
禁用图像
–incognito
启动进入隐身模式
–enable-udd-profiles
启用账户切换菜单
–proxy-pac-url
使用pac代理 [via 1/2]
–lang=zh-CN
设置语言为简体中文
–disk-cache-dir
自定义缓存目录
–disk-cache-size
自定义缓存最大值(单位byte)
–media-cache-size
自定义多媒体缓存最大值(单位byte)
–bookmark-menu
在工具 栏增加一个书签按钮
–enable-sync
启用书签同步
3、 常用参数搭配
=========
制作无头浏览器
第一种写法
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument(‘–headless’)
chrome_options.add_argument(‘–disable-gpu’)
driver = webdriver.Chrome(chrome_options=chrome_options)
第二种写法
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument(‘–headless’)
options.add_argument(‘–disable-gpu’)
driver = webdriver.Chrome(chrome_options=options)
规避检测
门户网站检测如果是selenium请求的,有可能会拒绝访问。这也是一种反爬机制
实现规避检测
from selenium import webdriver
from selenium.webdriver import ChromeOptions
options = ChromeOptions()
options.add_experimental_option(‘excludeSwitcher’, [‘enable-automation’])
driver = webdriver.Chrome(options=options)
注意:这里只能使用 options 添加
如果有其他的模块要添加,注意要分开添加
4、 分浏览器启动
=========
from selenium import webdriver
driver = webdriver.Firefox() # Firefox浏览器
driver = webdriver.Firefox(executable_path=“驱动路径”)
driver = webdriver.Chrome() # Chrome浏览器
driver = webdriver.Ie() # Internet Explorer浏览器
driver = webdriver.Edge() # Edge浏览器
driver = webdriver.Opera() # Opera浏览器
driver = webdriver.PhantomJS() # PhantomJS
二、 基本语法
=======
1、 元素定位
=======
元素定位语法
常用语法:
find_element_by_id()
find_element_by_name()
find_element_by_class_name()
find_element_by_tag_name()
find_element_by_link_text()
find_element_by_partial_link_text()
find_element_by_xpath()
find_element_by_css_selector()
在 element 变成 elements 时,返回符合条件的所有元素组成的数组
2、 控制浏览器操作
==========
控制浏览器大小
- driver.set_window_size(480, 800)
浏览器后退,前进
driver.forward()
driver.back()
刷新
- driver.refresh()
3、 操作元素的方法
==========
3.1 点击和输入
=========
driver.find_element_by_id(“kw”).clear() # 清空文本
driver.find_element_by_id(“kw”).send_keys(“selenium”) # 模拟按键输入
driver.find_element_by_id(“su”).click() # 单击元素
3.2 提交
======
在搜索框模拟回车操作
search_text = driver.find_element_by_id(‘kw’) search_text.send_keys(‘selenium’) search_text.submit() # 模拟回车操作
3.3 其他
======
drive.size # 返回元素的尺寸
drive.text # 获取元素的文本
drive.get_attribute(name) # 获得属性值
drive.is_displayed() # 设置该元素是否用户可见
drive.page_source # 获取网页源代码
4、 鼠标操作
=======
在 WebDriver 中, 将这些关于鼠标操作的方法封装在 ActionChains 类提供
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) ——发送某个键到指定元素
语法:
from selenium.webdriver.common.action_chains import ActionChains
获取元素
menu = driver.find_element_by_css_selector(“.nav”)
hidden_submenu = driver.find_element_by_css_selector(“.nav #submenu1”)
链式写法
ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()
分步写法
actions = ActionChains(driver)
actions.move_to_element(menu)
actions.click(hidden_submenu)
actions.perform()
5、 键盘操作
=======
想使用selenium中的键盘事件,首先我们必须导入Keys包,需要注意的是包名称Keys首字母需要大写。Keys类中提供了几乎所有的键盘事件包括组合按键如 Ctrl+A、 Ctrl+C 等
使用语法:
from selenium.webdriver.common.keys import Keys
element.send_keys(键盘事件)
常用键盘事件
Keys.BACK_SPACE # 回退键(BackSpace)
Keys.TAB # 制表键(Tab)
Keys.ENTER # 回车键(Enter)
Keys.SHIFT # 大小写转换键(Shift)
Keys.CONTROL # Control键(Ctrl)
Keys.ALT # ALT键(Alt)
Keys.ESCAPE # 返回键(Esc)
Keys.SPACE # 空格键(Space)
Keys.PAGE_UP # 翻页键上(Page Up)
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
三、全套PDF电子书
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。
四、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
五、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!