关于Python的Selenium框架全解,一篇完整的说明书(1)


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)

Keys.PAGE_DOWN # 翻页键下(Page Down)

Keys.END # 行尾键(End)

Keys.HOME # 行首键(Home)

Keys.LEFT # 方向键左(Left)

Keys.UP # 方向键上(Up)

Keys.RIGHT # 方向键右(Right)

Keys.DOWN # 方向键下(Down)

Keys.INSERT # 插入键(Insert)

DELETE # 删除键(Delete)

NUMPAD0 ~ NUMPAD9 # 数字键1-9

Keys.F5 # 刷新键

F1 ~ F12 # F1 - F12键

(Keys.CONTROL, ‘a’) # 组合键Control+a,全选

(Keys.CONTROL, ‘c’) # 组合键Control+c,复制

(Keys.CONTROL, ‘x’) # 组合键Control+x,剪切

(Keys.CONTROL, ‘v’) # 组合键Control+v,粘贴

其他事件可以通过查看源码获取

6、 获取断言信息

=========

title = driver.title # 打印当前页面title

now_url = driver.current_url # 打印当前页面URL

user = driver.find_element_by_class_name(‘nums’).text # # 获取结果数目

7、 等待页面加载完成

===========

7.1 显示等待

========

显式等待使WebdDriver等待某个条件成立时继续执行,否则在达到最大时长时抛出超时异常

实例:

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions

driver = webdriver.Firefox()

driver.get(“http://www.baidu.com”)

element = WebDriverWait(driver, 5, 0.5).until(

expected_conditions.presence_of_element_located((By.ID, “kw”))

) # expected_conditions.presence_of_element_located()方法判断元素是否存在

element.send_keys(‘selenium’)

driver.quit()

WebDriverWait类是由WebDirver 提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常

语法:

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

参数:

  • driver :浏览器驱动

  • timeout :最长超时时间,默认以秒为单位

  • poll_frequency :检测的间隔(步长)时间,默认为0.5S

  • ignored_exceptions :超时后的异常信息,默认情况下抛NoSuchElementException异常

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)

driver :浏览器驱动

  • timeout :最长超时时间,默认以秒为单位

  • poll_frequency :检测的间隔(步长)时间,默认为0.5S

  • ignored_exceptions :超时后的异常信息,默认情况下抛NoSuchElementException异常

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-N3omamu7-1712647282868)]

[外链图片转存中…(img-fX5tsU4O-1712647282869)]

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)

img
  • 18
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值