Selenium学习

准备

1、安装selenium,
使用python语言,则windows在终端输入进行安装selenium
pip install selenium

2、安装浏览器对应版本的驱动

一个简单的案例(使用selenium)

from selenium import webdriver

# 创建webdriver对象,指明使用chrome浏览器驱动
#后面的目录为浏览器驱动的程序目录
wd = webdriver.Chrome(r'D:\webdrivers\chromedriver.exe')

# 调用webdirver对象的get方法,可以让浏览器打开指定网址
wd.get('https://www.baidu.com')

# 执行完自动化代码后,关闭浏览器窗口,调用webdriver对象的quit方法
wd.quit()

# 将chromedriver所在目录加入环境变量Path中,再写代码时,就可以无需指定浏览器驱动路径了如:
# wd = webdriver.Chrome()

# 关闭chromedriver打印信息

# 缺省情况下,chromedrive被启动后,会在屏幕上输出不少日志信息,如下
# DevTools listening on ws://127.0.0.1:19727/devtools/browser/c19306ca-e512-4f5f-b9c7-f13aec506ab7
# [21564:14044:0228/160456.334:ERROR:device_event_log_impl.cc(211)] [16:04:56.333] Bluetooth: bluetooth_adapter_winrt.cc:1072 Getting Default Adapter failed.

# 关闭改信息
options = webdriver.ChromeOptions()
options.add_experimental_option(
    'exclueSwitches',['enable-logging'])

wd = webdriver.Chrome(r'D:\webdrivers\chromedriver.exe',options=options#这里指定optons参数

选择元素的基本方法

选择单个元素的基本方法

(1)根据ID选择元素

from selenium import webdriver
from selenium.webdriver.common.by import By

# 关闭chromedriver打印信息
options = webdriver.ChromeOptions()
options.add_experimental_option(
    'excludeSwitches',['enable-logging']
)
wd = webdriver.Chrome(r'd:\webdrivers\chromedriver.exe',options=options)

wd.get('http://www.baidu.com')

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

(2)根据类名选择元素
wd.find_element(By.CLASS_NAME,'password'))

(3)根据Tag名选择元素
wd.find_element(By.TAG_NAME,'input')

(4)根据CSS选择器选中元素
wd.find_element(By.CSS_SELECTOR,'button[type=submit').
(CSS选择器会再下面详细讲)

选择多个元素的基本方法

"""选择多个元素的基本方法,根据类名class_name来选择元素"""

from selenium import webdriver
from selenium.webdriver.common.by import By

# 关闭webdriver打印的日志
options = webdriver.ChromeOptions()
options.add_experimental_option(
    'excludeSwitches',['enable-logging']
)
wd = webdriver.Chrome(r'd:\webdrivers\chromedriver.exe',options=options)
wd.get('http://cdn1.python3.vip/files/selenium/sample1.html')

# 根据class name选择元素,返回的是一个列表
# 里面都是class属性值为animal的元素对应的WebElement对象
elements = wd.find_elements(By.CLASS_NAME,'animal')

提示:
等待界面元素出现,当进行网页操作的时候,有的元素内容不是可以立即出现的,可能会等待一段时间
当页面还没加载出来的时候,根本就查找不到元素,代码执行的速度比服务器响应的速度快.
所以我们可以通过设置sleep时间来等待几秒钟,等服务器返回结果后,再去查找元素使用:from time import sleep sleep(2)
但是设置等待时间多长合适呢?
这个时候selenium就提供了一个implicitly_wait方法,该方法接收一个参数,用来指定最大的等待时长
使用:wd.implicitly_wait(10)
注意:implicitly_wait是指找不到元素了才会调用这个方法,每隔半秒中去界面上查看一次.
但是当元素出来了,但是元素中的内容还没加载出来,这个时候就需要我们去使用sleep()等待

操控元素的基本方法

操控元素通常包括:
1、点击元素
2、再元素中输入字符串,通常是对输入框这样的元素
3、获取元素包含的信息,比如文本内容,元素的属性等

(1)点击元素(.click())方法
调用webelement对象的click方法去点击元素的时候,浏览器接收到自动化命令,点击的是该元素的中心点位置
wd.find_element(By.CSS_SELECTOR,'button[type=submit').click()

(2)输入框:
输入字符串:调用元素webelement对象的send_keys()方法
清除输入框中的内容:调用webelement对象的clear()方法
wd.find_element(By.TAG_NAME,'input').send_keys('sdfsdf')

(3)获取元素信息
a.获取元素属性使用:

element.get_attribute('class')

b.获取整个元素对应的HTML文本内容:

element.get_attribute('outerHTML')

c.获取某个元素内部的HTML文本内容:

element.get_attribute('innerHTML')

d.获取输入框里面的输入的文本:

element.get_attribute('value')

e.获取元素展示在界面上的文本内容:

element.get_attribute('innerText')


element.get_attribute('textContent')

CSS表达式

css selector 语法选择元素

选择单个、多个元素:

选择单个元素
find_element(By.CSS_SELECTOR,CSS Selector参数)

选择多个元素
find_elements(By.CSS_SELECTOR,CSS Selector参数)

根据id选择元素,需要在id前加上 #

from selenium import webdriver
from selenium.webdriver.common.by import By

options = webdriver.ChromeOptions()
options.add_experimental_option(
    'excludeSwitches',['enable-logging']
)

wb = webdriver.Chrome(r'd:/webdrivers/chromedriver.exe',options=options)
wb.get('http://cdn1.python3.vip/files/selenium/sample1.html')
elements = wb.find_element(By.CSS_SELECTOR,'#searchtext')
elements.send_keys('你好')

根据class选择元素,需要在class前加上.

from selenium import webdriver
from selenium.webdriver.common.by import By

options = webdriver.ChromeOptions()
options.add_experimental_option(
    'excludeSwitches',['enable-logging']
)

wb = webdriver.Chrome(r'd:/webdrivers/chromedriver.exe',options=options)
wb.get('http://cdn1.python3.vip/files/selenium/sample1.html')
elements = wb.find_elements(By.CLASS_NAME,'animal')
# 或是写为 elements = wb.find_elements(By.CLASS_NAME,'.animal')
for element in elements:
    print(element.text)

选择子元素和后代元素

子元素

若元素2是元素1 的直接子元素,css selector选择子元素的语法是:

元素1 > 元素2
这个最终选择的元素是元素2,并且要求这个元素2是元素1的直接子元素

后代元素

若元素2 是元素1 的后代元素,css selector选择后代元素的语法是:

元素1 元素2
中间是一个或多个空格隔开

根据属性选择

"""根据属性选择"""

from selenium import webdriver
from selenium.webdriver.common.by import By

options = webdriver.ChromeOptions()
options.add_experimental_option(
    'excludeSwitches',['enable-logging']
)

wd = webdriver.Chrome(r'd:/webdrivers/chromedriver.exe',options=options)
wd.get('http://cdn1.python3.vip/files/selenium/sample1.html')

element = wd.find_element(By.CSS_SELECTOR,'[href="http://www.miitbeian.gov.cn"]')
print(element.get_attribute('outerHTML'))
# 前面可以加上标签名的限制,比如div[class='SKnet'] 表示选择所有标签名为div,且class属性值为SKnet的元素

选择属性值包含某个字符串的元素

例如:选择a节点,里面的href属性包含了miitbeian字符串, 可以写成

a[href*="miitbeian"]

选择属性值以某个字符串开头的元素

例如:选择a节点,里面的href属性以http开头,可以写成
a[href^="http"]

选择属性值以某个字符串结尾的元素

a[href$="gov,cn"]

如果一个元素有多个属性

<div class="misc" ctype="gun">快乐学习</div>

CSS选择器可以指定选择的元素要同时具有多个属性的限制,像这样**:div[class=misc][ctype=gun]**

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值