Selenium自动化

本文详细介绍了在Windows环境下安装Python版Selenium的步骤,包括浏览器驱动、环境配置、浏览器控制、特殊定位方法、框架切换、下拉列表操作及等待策略。此外,还涵盖了鼠标、键盘操作、JS调用、窗口截图和验证码处理等内容。
摘要由CSDN通过智能技术生成

环境搭建

Windows环境下,Python版的Selenium的安装过程如下:
1)安装Python和PyCharm
2)安装Selenium
在线安装:命令行窗口输入命令

pip install selenium==3.14

离线安装:
下载地址:https://pypi.org/project/selenium/

cd 路径(有setup.py文件的目录)
python setup.py install
# 注意!安装两个包:urllib3+selenium
# urllib3 是一个收集了多个用到 URL 的模块的包

3)安装浏览器并禁用更新;

计算机---管理---服务---Google更新服务---"禁用"

4)获取浏览器对应的驱动,并将浏览器驱动存放的路径添加到系统环境变量path里;
5)写一个简单的Selenium脚本跑一下。

通用定位

from selenium import webdriver
from time import sleep

# 【启动浏览器】
browser = webdriver.Chrome()
sleep(2)
# 【打开页面】
browser.get("https://www.baidu.com")
sleep(2)
browser.maximize_window()

# 【1】id定位
# 根据元素的id名来定位,相对唯一,可能会动态变化。
a1 = browser.find_element_by_id("feed_news_list")

# 【2】name定位
# 根据元素的name属性值来定位,可能不唯一。
a2 = browser.find_elements_by_name('baidu-site-verification')

# 【3】tag name定位
# 根据元素的标签名来定位,一般不唯一。
a3 = browser.find_elements_by_tag_name("h1")

# 【4】class name
# 根据元素的class属性值来定位,可能不唯一,受js影响动态变化
a4 = browser.find_elements_by_class_name('sitelink icon-site')

# 【5】link定位
# 根据<a>网易</a>来定位
a5 = browser.find_element_by_link_text('网易').click()

# 【6】partial link定位
# # 根据<a>网易</a>来定位
a6 = browser.find_elements_by_partial_link_text('易')

# 【7.1】css id选择器------>#id名[属性="属性值"]
# 【7.2】css class选择器--->.class名[属性="属性值"]
browser.find_element_by_css_selector('.g-gc[href="http://www.ce.cn/"]').click()
# layout > ul:nth-child(39) > li:nth-child(2) > p
# CSS里标识层级关系使用的是 >
# 【7.3】css 元素选择器--->元素名[属性="属性值"]
browser.find_element_by_css_selector('a[data-title="豆瓣网"]').click()
# 【7.4】**名字当中有空格时**
#  如:class="pn ng"  可写为".pn.ng"

# 【8.1】Xpath 相对路径    //表示任意目录
browser.find_element_by_xpath('''//ul/li[10]/div/a[@data-title="网易云音乐"]''').click()
# 【8.2】Xpath 绝对路径    /html....[@属性名="属性值"]
# 【8.3】可以使用逻辑运算符来连接多个属性 and
# 【8.4】模糊属性值定位
#  比如:动态id【starts-with】、【ends-with】、【contains】
browser.find_element_by_xpath("//h1[starts-with(@id,'username_')]")
# 【关闭浏览器】
browser.quit()

注意

find_elements    匹配多个,返回一个列表,匹配0个,返回空列表
find_element     匹配到多个,只返回第一个,类型为webelement

特殊定位

from selenium import webdriver
from time import sleep
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.select import Select

browser = webdriver.Chrome()
browser.implicitly_wait(4)
# 【JS打开网页】  相当于浏览器顶部 " + "
js1 = 'window.open("https://www.baidu.com");'
browser.execute_script(js1);sleep(2)

js2 = 'window.open("https://www.csdn.net/");'
browser.execute_script(js2);sleep(2)

js3 = 'window.open("https://www.bilibili.com/");'
browser.execute_script(js3);sleep(2)

js4 = 'window.open("https://dict.youdao.com/?keyfrom=cidian");'
browser.execute_script(js4);sleep(2)

# 【切换窗口--for循环】
# browser.current_window_handle  获取当前窗口句柄
# browser.window_handles         获取所有的窗口句柄
# browser.switch_to.window(i)    切换到某个窗口
h1 = browser.current_window_handle
for i in browser.window_handles:
    if i != h1:
        browser.switch_to.window(i)
        sleep(2)
# 【切换窗口--通过句柄编号切换】
handle_num = [0,4,3,2,1]#对应第1 2 3 4 5个网页
for i in handle_num:
    browser.switch_to.window(browser.window_handles[i])
    sleep(2)
# 【弹窗处理】----------------------------------------
browser.switch_to.alert.text()     # 获取弹窗上的文本信息
browser.switch_to.alert.accept()   # 接受弹窗
browser.switch_to.alert.dismiss()  # 取消弹窗
# 【鼠标操作】----------------------------------------
element2 = browser.find_element_by_id("悬停的元素的id")
ActionChains(browser).move_to_element(element2).perform()  # 鼠标悬停
ActionChains(browser).double_click(element2).perform()     # 双击
ActionChains(browser).context_click(element2).perform()    # 右击
# 【键盘操作】----------------------------------------
text1 = browser.find_element_by_id("文本框的id")
text1.send_keys("abc")
text1.send_keys(Keys.BACK_SPACE)    # 退格
text1.send_keys(Keys.CONTROL, "a")  # 全选
# 剪切("x")       粘贴("v")
# 【JS调用】----------------------------------------
browser.set_window_size(800, 600)   # 产生滚动条
js_1 = "window.scrollTo(100,450);"  # js代码
browser.execute_script(js_1)        # 执行js代码
# 【窗口截图】----------------------------------------
browser.get_screenshot_as_file(r".\0101.png")
# 【获取元素标签中的文本】
# <div>要找的文本</div>
element1 = browser.find_element_tag_name("div")
element1.getAttribute("textContent")
# 【验证码处理】---------------------------------------
#  去掉验证码
#  设置万能验证码
#  购买验证码识别技术
#  手工输入

文本框

from selenium import webdriver
browser = webdriver.Chrome()
# 清空文本框内容
browser.find_element_by_id("scbar_txt").clear()
# 输入selenium
browser.find_element_by_id("scbar_txt").send_keys("selenium")
# 提交输入的内容
browser.find_element_by_id("scbar_txt").submit()

框架切换

<h3>frame</h3>
<iframe  src="http://www.baidu.com" width="800" height="300">
</iframe>

在这里插入图片描述

from selenium import webdriver
browser = webdriver.Chrome()
# 定位到框架
element1 = browser.find_element_by_id("框架中某个元素的id")
browser.switch_to.frame(element1) 
# 返回到主页面
browser.switch_to.default_content()  
browser.quit()

下拉列表

<select name= education id=education>
       <option value=1>高中</option>
       <option value=2>大学</option>
       <option value=3>博士</option>
</select>
from selenium.webdriver.support.select import Select
from selenium import webdriver
browser = webdriver.Chrome()
# 必须先要导入Select模块
element1 = browser.find_element_by_xpath('// *[ @ id = "education"]')
e = Select(element1)
e.select_by_visible_text("高中")
e.select_by_value("2")
e.select_by_index(0)
browser.quit()

等待方式

1.强制等待

import time
sleep(2)

2.隐式等待

# 只需要声明一次,页面所有元素都在规定时间内加载好,才执行下一步
from selenium import webdriver
implicitly_wait(10) 

3.显式等待

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
browser=webdriver.Firefox()
sleep(2)
# 打开百度页面
browser.get("https://www.baidu.com/")
# 【只要某个元素在规定时间内加载好,就执行下一步】
e=WebDriverWait(browser,5,0.5).until(EC.presence_of_element_located((By.ID,'kw')))
e.send_keys("selenium")
sleep(2)
browser.quit()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值