082-selinium

 

摘要:

阅读这部分快速回忆下相关知识,文末有例子、

主要的使用步骤:

(1)安装Selenium,下载驱动并添加环境变量,安装katalon recorder

(2)【firefox浏览器】在katalon recorder中点recorder开始记录,然后在export生成python代码

(3)可能出现一些报错,可以试着添加

 

#1 设置最大等待时长为 10秒
driver.implicitly_wait(10)

#2刷新
driver.refresh()

#3查看是否在frame里而不是html里
#4可能已经切换了窗口,但是还在原来的窗口查找,所以报错。
print(driver.title)

(4)selenium主要难点是如何选择,比如选择页面的某个按钮。当然也有很多工具可以用,

例如,可以用  find_elements_by_class_name

也可用ccs,通过类名或者ID,或者属性。下面有详细介绍。当然我用的是浏览器里的插件,做记录然后导出python程序。

几种选择方式的差别推荐一个博客https://blog.csdn.net/u012941152/article/details/97267338

(5)里面的一些小知识点,例如webdriver和element 之间的差别,一个是全文一个是当前的标签下。

wd = webdriver.Chrome()

wd.get('http://cdn1.python3.vip/files/selenium/sample1.html')

element = wd.find_element_by_id('container')

(6)至于如何切换窗口,如何延时,刷新,可看文末的程序例子。

 

【1】下载火狐

【2】添加组件  katalon recorder

在火狐里搜katalon recorder就行。

 

【3】下载驱动,并添加环境变量,我直接下载的最新的。

https://github.com/mozilla/geckodriver/releases  

【4】安装Selenium

下载Selenium的官方地址:https://pypi.org/project/selenium/

进入此目录后,输入python setup.py install

pip list 查看是否安装成功

------------------------------------------------------------------------------------------------华丽丽的分割线,后面是笔记-----------------

【5】各种报错,不得不过一遍基础知识。。。

推荐一个网站http://www.python3.vip/tut/auto/selenium/01/   后面很多例子都用的他里面的

【6】右键----检查可以看到元素的各种属性,比如id  class   ,可以根据这些东西进行定位。

例如:百度搜索框的id

# 根据id选择元素,返回的就是该元素对应的WebElement对象
element = wd.find_element_by_id('kw')

【7】<>这个称为元素,里面的称为子元素

 

<div class="plant"><span>土豆</span></div>

<div class="animal"><span>狮子</span></div>

所有的植物元素都有个class属性 值为 plant。

所有的动物元素都有个class属性 值为 animal。

如果我们要选择 所有的 动物, 就可以使用方法 find_elements_by_class_name

elements = wd.find_elements_by_class_name('animal')

【8】根据标签查找,加括号里的<body><span>等等这些

【9】限制搜索的范围方法

WebDriver 对象 选择元素的范围是 整个 web页面, 而

WebElement 对象 选择元素的范围是 该元素的内部。

 

 

wd = webdriver.Chrome()

wd.get('http://cdn1.python3.vip/files/selenium/sample1.html')

element = wd.find_element_by_id('container')

# 限制 选择元素的范围是 id 为 container 元素的内部。
spans = element.find_elements_by_tag_name('span')

【10】设置延时

wd.implicitly_wait(10)

【11】获取整个元素对应的HTML

要获取整个元素对应的HTML文本内容,可以使用 element.get_attribute('outerHTML')

如果,只是想获取某个元素 内部 的HTML文本内容,可以使用 element.get_attribute('innerHTML')

【12】ccs

【13】ccs(2)

CSS Selector 同样可以根据tag名、id 属性和 class属性 来 选择元素,

根据 tag名 选择元素的 CSS Selector 语法非常简单,直接写上tag名即可,

【14】ccs 空格和>区别

元素1 > 元素2 > 元素3 > 元素4

就是选择 元素1 里面的子元素 元素2 里面的子元素 元素3 里面的子元素 元素4 , 最终选择的元素是 元素4

如果 元素2元素1 的 后代元素, CSS Selector 选择后代元素的语法是这样的

元素1   元素2

【15】[]

id、class 都是web元素的 ```属性``` ,因为它们是很常用的属性,所以css选择器专门提供了根据 id、class 选择的语法。

那么其他的属性呢?

比如 <a href="http://www.miitbeian.gov.cn">苏ICP备88885574号</a> 里面根据 href选择,可以用css 选择器吗?

css 选择器支持通过任何属性来选择元素,语法是用一个方括号 []

【16】F12  

ctrl+f   输入表达式,搜索下可以验证表达式写的对否

【17】. 类名   # id    举例如下:

【18】逗号   表示同时选择

【19】父元素的第n个子节点

我们可以指定选择的元素 是父元素的第几个子节点,使用 nth-child

选择的是 第2个子元素,并且是span类型

所以这样可以这样写 span:nth-child(2) 

【20】倒数第几个子节点 ,使用 nth-last-child

【21】

(1)选择的是 第2个子元素,并且是span类型

所以这样可以这样写 span:nth-child(2) 

 

(2)选择父元素的 倒数第几个某类型 的子节点

使用 nth-last-of-type

 

我们可以指定选择的元素 是父元素的第几个 某类型的 子节点使用 nth-of-type

选择的是 第2个子元素,并且是span类型,所以这样可以这样写 span:nth-child(2)

【22】+

 h3 后面紧跟着的兄弟节点 span。

  这就是一种 相邻兄弟 关系,可以这样写 h3 + span

【23】~

如果要选择是 选择 h3 后面所有的兄弟节点 span,可以这样写 h3 ~ span

【24】frame

(1)转入frame

白月黑羽Python3教程

(2)转出frame

wd.switch_to.default_content()

【25】切换到新的窗口

那么我们就可以通过 类似下面的代码,

for handle in wd.window_handles:
    # 先切换到该窗口
    wd.switch_to.window(handle)
    # 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口
    if 'Bing' in wd.title:
        # 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,
        break

上面代码的用意就是:

我们依次获取 wd.window_handles 里面的所有 句柄 对象, 并且调用 wd.switch_to.window(handle) 方法,切入到每个窗口。

 

(切换到原来的)

因为我们一开始就在 原来的窗口里面,我们知道 进入新窗口操作完后,还要回来,可以事先 保存该老窗口的 句柄,使用如下方法

# mainWindow变量保存当前窗口的句柄
mainWindow = wd.current_window_handle

切换到新窗口操作完后,就可以直接像下面这样,将driver对应的对象返回到原来的窗口

#通过前面保存的老窗口的句柄,自己切换到老窗口
wd.switch_to.window(mainWindow)

【26】打印当前窗口名字

# wd.title属性是当前窗口的标题栏 文本
print(wd.title)

【27】driver.refresh()

from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()

# 设置最大等待时长为 10秒
driver.implicitly_wait(10)

driver.get("https://www.baidu.com/baidu?tn=monline_7_dg&ie=utf-8&wd=%E5%93%88%E5%93%88")
print(driver.title)
driver.find_element_by_id("su").click()
print(driver.title)
# for handle in driver.window_handles:
#     # 先切换到该窗口
#     driver.switch_to.window(handle)
#     print(driver.title)
#     # 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口
#     if '百科' in driver.title:
#         # 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,
#         break
driver.refresh()
#driver.find_element(By.LINK_TEXT,"哈哈_百度百科").click()
driver.find_element_by_link_text(r"哈哈_百度百科").click()
print(driver.title)



【28】完整的程序,以后可以在他基础上改。

程序主要就是click

from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()

# 设置最大等待时长为 10秒
driver.implicitly_wait(10)

driver.get("https://www.baidu.com/baidu?tn=monline_7_dg&ie=utf-8&wd=%E5%93%88%E5%93%88")
print(driver.title)
print("https://www.baidu.com/baidu?tn=monline_7_dg&ie=utf-8&wd=%E5%93%88%E5%93%88")
print("--------------------------")
driver.find_element_by_id("su").click()
print(driver.title)
print("su")
print("--------------------------")

driver.refresh()

driver.find_element_by_link_text(u"哈哈_百度百科").click()
for handle in driver.window_handles:
    # 先切换到该窗口
    driver.switch_to.window(handle)
    print("窗口名字",driver.title)
    # 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口
    if '百科' in driver.title:
        # 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,
        break
driver.refresh()
print("哈哈_百度百科")
print(driver.title)
print("--------------------------")
driver.find_element_by_link_text(u"近义词").click()
for handle in driver.window_handles:
    # 先切换到该窗口
    driver.switch_to.window(handle)
    print("窗口名字",driver.title)
    # 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口
    if '近义词' in driver.title:
        # 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,
        break
driver.refresh()
print("近义词")
print(driver.title)
driver.find_element_by_link_text(u"呵呵").click()
for handle in driver.window_handles:
    # 先切换到该窗口
    driver.switch_to.window(handle)
    print("窗口名字",driver.title)
    # 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口
    if '呵呵' in driver.title:
        # 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,
        break
driver.refresh()
print(driver.title)
print("呵呵")
driver.find_element_by_link_text(u"嘲笑").click()
for handle in driver.window_handles:
    # 先切换到该窗口
    driver.switch_to.window(handle)
    print("窗口名字",driver.title)
    # 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口
    if '嘲笑' in driver.title:
        # 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,
        break
driver.refresh()
print(driver.title)
print("嘲笑")


 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了python应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值