首页安装第三方库selenium库,
其次要下载好浏览器驱动文件,比如谷歌的 chromedriver.exe,配置上环境变量。
使用selenium的webdriver类去创建一个浏览器驱动对象赋值叫driver,一个浏览器驱动对象就可以
(原理:代码--->发送http请求-----> 到了真正的浏览器驱动中的http server----->浏览器才执行步骤)
- from selenium import webdriver
- driver = webdriver.Chrome()
(截全屏,和元素截图的另一种方式)
- # 屏幕截图另一个格式
- get_screenshot_as_png 这个是不带文件参数的,就需要用with open 来创建
- with open('window1.png','wb') as f:
- f.write(driver.get_screenshot_as_png())
-
- # 元素截图另一种格式
- 另外元素截图还可以用这种,也是也是需要用with open打开
- with open('code.png','wb') as f:
- f.write(ele_code.screenshot_as_png) # 把图片变成字节流的数据
-
-
- # 补充知识(OCR识别):
- ele_bytes = ele_code.screenshot_as_png
- import ddddocr # pip install ddddocr -i https://pypi.tuna.tsinghua.edu.cn/simple/
- ocr=ddddocr.DdddOcr(show_ad=False) # 参数表示去掉广告
- text = ocr.classification(ele_bytes) # 提取文本信息
-
- 或者
- with open('xxx.png' ,'rb') as f: # r表示读, b表示二进制 也是字节流的数据
- data = f.read()
截图可以使用的地方:可以用来截取验证码,然后ocr识别图片上的文本

driver.find_element(By.CSS_SELECTOR,'#multiSelect')
8种定位方式,面试前背背就行。。
页面F12, 可以ctrl F进行搜索
下图也是不用专门背

Xpath定位(这两种要用的):
//*[text(),"文本"] //*[contains(text(),"文本")]
//input[@id='kw' and @class]
例: se = ele.is_selected() if se: print("已经被选中")
方式1(只适用于select标签):
![]()
警告框出来后,首先要driver.switch_to点alert
记住是通过send_keys,完成的就行了,然后传入键盘的值, 用的少,也没难度,用时查
如:对【提交按钮】元素进行,回车键
对【输入框】元素进行,ctrl A, ctrl C V 等, (Keys.键*数字) 表示多次操作 如回退 Keys.BACKSPACE*2 等
如下图,是百度提交

从selenium引入ActionChains类,然后action = ActionChains(driver)实例化一个action对象
from selenium.webdriver import ActionChains
练习地址:https://sahitest.com/demo/
ActionChains(driver).动作1.动作2.perform() 它是一个链式调用

拖动滑块也能实现 drag_and_drop_by_offset(ele,向右的x,向下的y))
ui自动化需掌握的知识点还有:
遇到有 iframe的元素嵌套网页,需要先先使用到 switch_to点frame(iframe元素de定位) ,切换到对应frame,才能进行元素操作,
另外它还有返回上层页面,和默认地方的操作(百度下)
http://42.192.62.186:8088/index.html#/home 账号密码: sq3 123 万能验证码:999999
普通的input框,直接用send_keys,传图片路径
非input框,用python第三方库,pypiwin32 或者 pyautogui 结合pyperclip
隐式等待 和显示等待 代码演示
隐式等待
driver.implicitly_wait(30) 可以设置一个最大等待时间,等页面加载完,才会去执行后面的找元素。 不然加载没出来,就找元素,会报错。
比如在渲染页面时,如果不等待直接去找,会找不到。
显示等待
找一种元素时,可以不停的找,直到它可见,就找到。
它的逻辑有点像下面这种(轮询去找,最后超过时间就不等了)
导入一个等待条件 (直接出现,或者直接可见),和一个webDriverWait类。

小补充:
滚动到可见代码 和 获取css属性值的例子
- from selenium import webdriver
- from time import sleep
- from selenium.webdriver.common.by import By
- driver = webdriver.Chrome()
- driver.get('https://www.runoob.com/')
- sleep(2)
- #打开了人看不到,但是网页这个树加载好了,这个元素可能就可以操作
- # driver.find_element_by_xpath("//h4[contains(text(),'【网站主机教程】')]").click()
-
- ele_host = driver.find_element(By.XPATH,"//h4[contains(text(),'【网站主机教程】')]")
- ele_host.location_once_scrolled_into_view # 报黄,但是不影响, 滚动条会自动下去
- print(ele_host.value_of_css_property('color')) #rgba(100, 133, 76, 1)
元素上找元素
http://42.192.62.186:8088/index.html#/demo/13

- '''
- 知识点:webelement的find_element_xxxx方法
- '''
- from selenium import webdriver
- import time
- driver = webdriver.Chrome()
- from selenium.webdriver.common.by import By
- driver.implicitly_wait(5)
- driver.get("http://42.192.62.186:8088/index.html#/")
- driver.maximize_window()
- # 账号密码
- driver.find_element(By.CSS_SELECTOR, '#username').send_keys('sq3')
- driver.find_element(By.CSS_SELECTOR, '#password').send_keys('123')
- driver.find_element(By.CSS_SELECTOR, '#code').send_keys('999999')
-
- driver.find_element(By.CSS_SELECTOR, "#submitButton").click()
- time.sleep(1)
- driver.refresh()
- time.sleep(1)
- driver.find_element(By.XPATH, "//span[contains(text(),'按钮')]").click()
- driver.find_element(By.XPATH, "//li[contains(text(),'下拉框')]").click()
-
-
- # 方式1 ,点击选项
- driver.find_element(By.XPATH, "//*[contains(text(),'3C数码')]").click()
- time.sleep(3)
- # 方式1 ,CSS定位
- driver.find_element(By.CSS_SELECTOR, "#categoryId > option:nth-child(3)").click()
-
- time.sleep(3)
- # 方式2,在下拉框上, 再找
- """元素上找元素 (分布找--------代码封装时有用), 缩小范围找"""
- driver.find_element(By.ID, 'categoryId').find_elements(By.TAG_NAME, 'option')[5].click()
- #找到id=categoryId的元素,在它下面找标签为option的元素