IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> selenium学习 -> 正文阅读

[开发测试]selenium学习

起手式

1.pycharm在File->settings->Project interpreter->里面下载好selenium模块,试试import一下这个包,如果成功则说明下载成功。(一般都没问题

2.还需要下载一下对应你的chrome浏览器版本的驱动,可以查看一下note.txt确定适用的版本,网址如下。

http://chromedriver.storage.googleapis.com/index.html

下载完后随意解压在一个地方(路径最好不要有中文),在代码中说明驱动路径就可以了,不一定要在环境变量里添加(我自己添加的时候出了问题。。wtcl)

完成这些以后,可以尝试一下试试模拟一下baidu搜索python,如果成功则说明一切准备就绪,脚本如下(暂时不需要知道整个代码是甚么)

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import time
chrome_driver = 'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe'  #chromedriver的文件位置
browser = webdriver.Chrome(executable_path = chrome_driver)
try:
    browser.get("https://www.baidu.com")
    input=browser.find_element_by_id("kw")
    input.send_keys("Python")
    input.send_keys(Keys.ENTER)
    wait=WebDriverWait(browser,10)
    wait.until(EC.presence_of_element_located((By.ID,"content_left")))
    print(browser.current_url)
    print(browser.get_cookies())
    print(browser.page_source)
    time.sleep(10)
finally:
    browser.close()

元素定位(八种)

爬虫肯定离不开对页面元素的定位,包括输入、发送请求、抓取文本等等,参考链接:https://blog.csdn.net/qq_30990097/article/details/81386750

1.通过id或name定位

<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">

这里是一个网页前端代码,可以通过name或者id属性进行定位,id属性肯定是唯一的,name的话也是get的一个参数,可能会有其他地方也使用这个

browser = webdriver.Chrome(executable_path = chrome_driver)
brower.find_element_by_id("kw")
brower.find_element_by_name("wd")

2.通过class name或tag name定位

    <div class="jstEditor">
    <textarea cols="60" rows="10" accesskey="e" class="wiki-edit" name="issue[description]" id="issue_description">
    </textarea>
    </div>

通过元素中带的class属性定位

brower.find_element_by_class_name("iki-edit")

通过元素中的tag标签定位,这种定位方式极不靠谱,不推荐采取此种方式。

brower.find_element_by_tag_name("div")

附加说明,如果class属性含有空格,那么取其中一个不重复的字段就可以了,例子:

<a title="新建版本" tabindex="200" class="icon-only icon-add" data-remote="true" data-method="get" href="/projects/bk_community/versions/new">新建版本</a>

其中class的属性值为“icon-only icon-add”,取其中“icon-only”、“ icon-add”都可以,但最好是取其中唯一的。

brower.find_element_by_class_name("icon-add")

3.通过link text和partial link text定位

<a href="http://news.baidu.com" target="_blank" class="mnav">新闻</a>

通过text link定位元素

brower.find_element_by_link_text("新闻")

通过partial link text定位元素,当文字链接很长时,可以通过此方式取其中一部分,只要取的部分可以作为唯一标识。

brower.find_element_by_partial_link_text("新")

4.xpath定位

此种定位方式需知晓xpath路径,通过火狐浏览器就可以知道,具体如何操作,可以通过火狐或者chrome的插件安装一个xpath finder,来查看元素的xpath

有时候你还可以f12,把dom树单独分屏,然后点击左上那个鼠标样子的东西,可以自行定位,就有时候它就给你个id,但是这个id是不固定的,那你只能通过它的上下层来判断。

调用的方法为:

brower.find_element_by_xpath("/html/body/div[1]/div/div[2]/ul/li[2]")

也可以通过相对路径自行填写,例如:

//*[@id="su"]/form/span/input              #通过上三级目录的id属性定位

当然也可以通过某一级的name属性定位。
对于不熟悉xpath的,可以看看w3school或者菜鸟教程

还有一个老师傅的博客可以参考参考,算是速成

5.CSS定位

这个。。说实话我感觉用处不大,暂时略,如果后面觉得它很好用我就重新补充。

我错了,我是sb。

css定位还是很牛的,这得好好记录一下

temp_input = browser.find_element_by_css_selector("input[data-caption='当天晨检体温']")

这里为什么我觉得css强呢。。是因为它不仅匹配了input这个

它还能根据里面的属性判断是哪个input,我感觉这个属性是人为定义的,所以只要找到它独一无二的属性就可以很轻松的定位了。

各种模拟操作

1.点击操作

根据元素定位获得元素后,可以对元素进行点击(各种)。

newday = browser.find_element_by_xpath('/html/body/main/article/section/div[2]/div[1]')
newday.click()                          #左键单击
newday.context_click()                  #右键点击
newday.double_click(on_element=None)	#双击
click_and_hold(on_element=None)	        #点击并抓起
drag_and_drop(source, target)	        
#在source元素上点击抓起,移动到target元素上松开放下。
drag_and_drop_by_offset(source, xoffset, yoffset)	
#在source元素上点击抓起,移动到相对于source元素偏移xoffset和yoffset的坐标位置放下

2.赋值

比如在框框(input)里填入内容

send_keys(*keys_to_send)	
将键发送到当前聚焦的元素。值是字符串就行
send_keys_to_element(element, *keys_to_send)	
将键发送到指定的元素。
clear()
清除元素的值

填入内容之后并没有发送请求,还需要对对应的元素进行点击

    user=browser.find_element_by_xpath("//*[@id='username']")
    user.clear()
    user.send_keys("123123")
    passwd=browser.find_element_by_xpath("//*[@id='password']")
    passwd.clear()
    passwd.send_keys("123123")
    log=browser.find_element_by_xpath("//*[@id='xsfw']")
    log.click()

3.等待

①显示等待

指定在某个时间内,如果某个条件满足了,那么就不会再等待,如果在指定的时间内条件都不满足,那么就不会再等待了。

要使用显示等待还需要载入一些selenium的包

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

其实完全使用import selenium是可以的,但是载入这么多包,运行起来就会比较慢,如果整个操作只需要几个模块,就无需载入完整的selenium。

下面是显示等待的用法:

WebDriverWait(browser, 30).until(EC.presence_of_element_located(
        (By.XPATH, "/html/body/div[1]/div[2]/div[1]/div/div[2]/div/a[2]")))

只要这个元素出现就停止等待,不然最多等待30秒,期间每0.5秒检查一下这个元素是否出现

这里的By.XPATH是指通过xpath来寻找元素并等待,同理还有classname什么的,pycharm会给补全

②隐式等待

这个等待比较弱,它只是让驱动在等待过程中,查看有没有元素,只要有元素它就不再等待

具体使用方法:

 browser.implicitly_wait(10)

其实这个比较鸡肋,一开始我以为这东西很好用,其实不然,还是要等确切的元素出现再点击,才不容易出错

4.切换窗口

有时候点击完了浏览器就会弹出一个新的窗口,这个时候需要你进行切换,因为你目前的操作句柄还在之前的页面,需要切换到最新的页面上去。

windows = browser.window_handles# 转换到最新打开的窗口
browser.switch_to.window(windows[-1])#即最新的窗口

如果要切换其他的窗口,也可以先打印所有句柄,然后

pageSource = browser.page_source
print(pageSource)

查看当前源代码

5.查看元素是否存在

因为我是个小萌新,代码水平有限,有时候要检查某个元素是否存在,进行测试,好像selenium没有这个函数,所以得自己写一个,具体如下:

def isElementExist_byxpath(driver, element):
    flag = True
    try:
        driver.find_element_by_xpath(element)
        return flag

    except:
        flag = False
        return flag

这里的xpath是根据你使用的查找方法设定的,可以自行修改。

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-09-20 16:03:26  更:2021-09-20 16:03:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 0:37:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码