爬虫 + 自动化利器 selenium 之自学成才篇(一)_selenium detach

from selenium import webdriver

Chrome浏览器

driver = webdriver.Chrome()


  

### 定位页面元素


#### 打开指定页面


使用 `selenium` 定位页面元素的前提是你已经了解基本的页面布局及各种标签含义,当然如果之前没有接触过,现在我也可以带你简单的了解一下。  
 以我们熟知的 CSDN 为例,我们进入首页,按 **【F12】** 进入开发者工具。红框中显示的就是页面的代码,我们要做的就是从代码中定位获取我们需要的元素。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/735a00dcc4b04f529a7f88459e1e75b3.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARHJlYW3kuLZLaWxsZXI=,size_20,color_FFFFFF,t_70,g_se,x_16)  
 想要定位并获取页面中的信息,首先要使用 `webdriver` 打开指定页面,再去定位。



from selenium import webdriver

Chrome浏览器

driver = webdriver.Chrome()
driver.get(‘https://www.csdn.net/’)


执行上面语句后会发现,浏览器打开 CSDN 主页后会马上关闭,想要防止浏览器自动关闭,可以添加下面代码。



不自动关闭浏览器

option = webdriver.ChromeOptions()
option.add_experimental_option(“detach”, True)

将option作为参数添加到Chrome中

driver = webdriver.Chrome(chrome_options=option)


这样将上面的代码组合再打开浏览器就不会自动关闭了。



from selenium import webdriver

不自动关闭浏览器

option = webdriver.ChromeOptions()
option.add_experimental_option(“detach”, True)

注意此处添加了chrome_options参数

driver = webdriver.Chrome(chrome_options=option)
driver.get(‘https://www.csdn.net/’)


下面我们再来看看几种常见的页面元素定位方式。


#### id 定位


标签的 `id` 具有唯一性,就像人的身份证,假设有个 `input` 标签如下。




我们可以通过 `id` 定位到它,由于 `id` 的唯一性,我们可以不用管其他的标签的内容。



driver.find_element_by_id(“toolbar-search-input”)


#### name 定位


`name` 指定标签的名称,在页面中可以不唯一。假设有个 `meta` 标签如下




我们可以使用 `find_element_by_name` 定位到 `meta` 标签。



driver.find_element_by_name(“keywords”)


#### class 定位


`class` 指定标签的类名,在页面中可以不唯一。假设有个 `div` 标签如下




我们可以使用 `find_element_by_class_name` 定位到 `div` 标签。



driver.find_element_by_class_name(“toolbar-search-container”)


#### tag 定位


每个 `tag` 往往用来定义一类功能,所以通过 `tag` 来识别某个元素的成功率很低,每个页面一般都用很多相同的 `tag` ,比如:`\<div\>`、`\<input\>` 等。这里还是用上面的 `div` 作为例子。




我们可以使用 `find_element_by_class_name` 定位到 `div` 标签。



driver.find_element_by_tag_name(“div”)


#### xpath 定位


`xpath` 是一种在 `XML` 文档中定位元素的语言,它拥有多种定位方式,下面通过实例我们看一下它的几种使用方式。



...
...

根据上面的标签需要定位 最后一行 `input` 标签,以下列出了四种方式,`xpath` 定位的方式多样并不唯一,使用时根据情况进行解析即可。



绝对路径(层级关系)定位

driver.find_element_by_xpath(
“/html/body/div/div/div/div[2]/div/div/input[1]”)

利用元素属性定位

driver.find_element_by_xpath(
“//*[@id=‘toolbar-search-input’]”))

层级+元素属性定位

driver.find_element_by_xpath(
“//div[@id=‘csdn-toolbar’]/div/div/div[2]/div/div/input[1]”)

逻辑运算符定位

driver.find_element_by_xpath(
“//*[@id=‘toolbar-search-input’ and @autocomplete=‘off’]”)


#### css 定位


`CSS` 使用选择器来为页面元素绑定属性,它可以较为灵活的选择控件的任意属性,一般定位速度比 `xpath` 要快,但使用起来略有难度。  
 `CSS` 选择器常见语法:




| 方法 | 例子 | 描述 |
| --- | --- | --- |
| **.class** | `.toolbar-search-container` | 选择 `class = 'toolbar-search-container'` 的所有元素 |
| **#id** | `#toolbar-search-input` | 选择 `id = 'toolbar-search-input'` 的元素 |
| **\*** | `*` | 选择所有元素 |
| **element** | `input` | 选择所有 `<input\>` 元素 |
| **element>element** | `div>input` | 选择父元素为 `<div\>` 的所有 `<input\>` 元素 |
| **element+element** | `div+input` | 选择同一级中在 `<div\>` 之后的所有 `<input\>` 元素 |
| **[attribute=value]** | `type='text'` | 选择 `type = 'text'` 的所有元素 |


举个简单的例子,同样定位上面实例中的 `input` 标签。



driver.find_element_by_css_selector(‘#toolbar-search-input’)
driver.find_element_by_css_selector(‘html>body>div>div>div>div>div>div>input’)


#### link 定位


`link` 专门用来定位文本链接,假如要定位下面这一标签。



加入!每日一练

我们使用 `find_element_by_link_text` 并指明标签内全部文本即可定位。



driver.find_element_by_link_text(“加入!每日一练”)


#### partial\_link 定位


`partial_link` 翻译过来就是“部分链接”,对于有些文本很长,这时候就可以只指定部分文本即可定位,同样使用刚才的例子。



加入!每日一练

我们使用 `find_element_by_partial_link_text` 并指明标签内部分文本进行定位。



driver.find_element_by_partial_link_text(“加入”)


  

### 浏览器控制


#### 修改浏览器窗口大小



from selenium import webdriver

Chrome浏览器

driver = webdriver.Chrome()
driver.get(‘https://www.csdn.net/’)

设置浏览器浏览器的宽高为:600x800

driver.set_window_size(600, 800)


使用 `maximize_window()` 方法可以实现浏览器全屏显示。



from selenium import webdriver

Chrome浏览器

driver = webdriver.Chrome()
driver.get(‘https://www.csdn.net/’)

设置浏览器浏览器的宽高为:600x800

driver.maximize_window()


#### 浏览器前进&后退


`webdriver` 提供 `back` 和 `forward` 方法来实现页面的后退与前进。下面我们 ①进入CSDN首页,②打开CSDN个人主页,③`back` 返回到CSDN首页,④ `forward` 前进到个人主页。



from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()

访问CSDN首页

driver.get(‘https://www.csdn.net/’)
sleep(2)
#访问CSDN个人主页
driver.get(‘https://blog.csdn.net/qq_43965708’)
sleep(2)
#返回(后退)到CSDN首页
driver.back()
sleep(2)
#前进到个人主页
driver.forward()


![请添加图片描述](https://img-blog.csdnimg.cn/62deac8da29f4f0d822cb7ed25a2221e.gif)


细心的读者会发现第二次 `get()` 打开新页面时,会在原来的页面打开,而不是在新标签中打开。如果想的话也可以在新的标签页中打开新的链接,但需要更改一下代码,执行 `js` 语句来打开新的标签。



在原页面打开

driver.get(‘https://blog.csdn.net/qq_43965708’)

新标签中打开

js = “window.open(‘https://blog.csdn.net/qq_43965708’)”
driver.execute_script(js)


#### 浏览器刷新


在一些特殊情况下我们可能需要刷新页面来获取最新的页面数据,这时我们可以使用 `refresh()` 来刷新当前页面。



刷新页面

driver.refresh()


#### 浏览器窗口切换


在很多时候我们都需要用到窗口切换,比如:当我们点击注册按钮时,它一般会打开一个新的标签页,但实际上代码并没有切换到最新页面中,这时你如果要定位注册页面的标签就会发现定位不到,这时就需要将实际窗口切换到最新打开的那个窗口。我们先获取当前各个窗口的句柄,这些信息的保存顺序是按照**时间**来的,最新打开的窗口放在数组的**末尾**,这时我们就可以定位到最新打开的那个窗口了。



获取打开的多个窗口句柄

windows = driver.window_handles

切换到当前最新打开的窗口

driver.switch_to.window(windows[-1])


#### 常见操作


webdriver中的常见操作有:




| 方法 | 描述 |
| --- | --- |
| `send_keys()` | 模拟输入指定内容 |
| `clear()` | 清除文本内容 |
| `is_displayed()` | 判断该元素是否可见 |
| `get_attribute()` | 获取标签属性值 |
| `size` | 返回元素的尺寸 |
| `text` | 返回元素文本 |


接下来还是用 CSDN 首页为例,需要用到的就是搜素框和搜索按钮。通过下面的例子就可以气息的了解各个操作的用法了。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/9dc1e74f9cdf4fc99463d98737520104.png)



from selenium import webdriver

driver = webdriver.Chrome()

driver.get(‘https://www.csdn.net/’)
sleep(2)

定位搜索输入框

text_label = driver.find_element_by_xpath(‘//*[@id=“toolbar-search-input”]’)

在搜索框中输入 Dream丶Killer

text_label.send_keys(‘Dream丶Killer’)

sleep(2)

清除搜索框中的内容

text_label.clear()

输出搜索框元素是否可见

print(text_label.is_displayed())

输出placeholder的值

print(text_label.get_attribute(‘placeholder’))

定位搜索按钮

button = driver.find_element_by_xpath(‘//*[@id=“toolbar-search-button”]/span’)

输出按钮的大小

print(button.size)

输出按钮上的文本

print(button.text)

‘’‘输出内容
True
python面试100问
{‘height’: 32, ‘width’: 28}
搜索
‘’’


![请添加图片描述](https://img-blog.csdnimg.cn/626604e9e51e473fa017107c14af7290.gif)


  

### 鼠标控制


在webdriver 中,鼠标操作都封装在ActionChains类中,常见方法如下:




| 方法 | 描述 |
| --- | --- |
| `click()` | 单击左键 |
| `context_click()` | 单击右键 |
| `double_click()` | 双击 |
| `drag_and_drop()` | 拖动 |
| `move_to_element()` | 鼠标悬停 |
| `perform()` | 执行所有ActionChains中存储的动作 |


#### 单击左键


模拟完成单击鼠标左键的操作,一般点击进入子页面等会用到,左键不需要用到ActionChains。


**一、Python所有方向的学习路线**

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

![img](https://img-blog.csdnimg.cn/1d40facda2b84990b8e1743f5487d455.png)  
![img](https://img-blog.csdnimg.cn/0fc11d4a31bd431dbf124f67f1749046.png)

**二、Python必备开发工具**

工具都帮大家整理好了,安装就可直接上手!![img](https://img-blog.csdnimg.cn/ff266f529c6a46c4bc28e5f895dec647.gif#pic_center)

**三、最新Python学习笔记**

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

![img](https://img-blog.csdnimg.cn/6d414e9f494742db8bcc3fa312200539.png)

**四、Python视频合集**

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

![img](https://img-blog.csdnimg.cn/a806d9b941c645858c61d161aec43789.png)

**五、实战案例**

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。![img](https://img-blog.csdnimg.cn/a353983317b14d3c8856824a0d6186c1.png)

**六、面试宝典**

![在这里插入图片描述](https://img-blog.csdnimg.cn/97c454a3e5b4439b8600b50011cc8fe4.png)

![在这里插入图片描述](https://img-blog.csdnimg.cn/111f5462e7df433b981dc2430bb9ad39.png)

###### **简历模板**![在这里插入图片描述](https://img-blog.csdnimg.cn/646863996ac44da8af500c049bb72fbd.png#pic_center)




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
  • 24
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Maven TestNG SeleniumUI自动化框架是一种基于Java语言、使用Maven作为构建工具、TestNG作为测试框架、SeleniumUI作为Web应用自动化测试工具的自动化测试框架。 - Java是一种跨平台的编程语言,被广泛应用于软件开发领域。使用Java语言可以编写可靠、高效、可扩展的自动化测试脚本。 - Maven是一个项目管理工具,通过定义项目的依赖关系和构建过程,能够自动下载和安装项目的相关依赖,简化了项目的构建和部署过程。 - TestNG是一个基于Java的测试框架,具有丰富的测试功能和灵活的配置选项,可以支持测试用例的并发执行、测试结果的报告生成等多种功能,提高了自动化测试的效率和可维护性。 - Selenium是一个Web应用自动化测试工具,通过模拟用户操作浏览器行为,可以对Web应用进行自动化测试。UI代表用户界面,Selenium可以对Web界面进行操作和验证。 Java Maven TestNG SeleniumUI自动化框架的使用可以帮助开发团队快速构建自动化测试环境,提高测试效率和质量。通过使用Maven作为构建工具,可以灵活管理项目的依赖,并提供自动化构建、部署和测试的能力。TestNG作为测试框架,提供了丰富的测试功能和灵活的配置选项,可以方便地编写和执行各种类型的测试。而SeleniumUI作为Web应用自动化测试工具,可以模拟用户操作浏览器行为,对Web界面进行自动化测试。 总之,Java Maven TestNG SeleniumUI自动化框架结合了Java语言、Maven工具、TestNG框架和SeleniumUI工具的优势,可以帮助开发团队高效地进行自动化测试,并提升项目的质量和可维护性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值