python-selenium定位方法

元素选择策略
在 WebDriver 中有 8 种不同的内置元素定位策略:


class name 定位class属性与搜索值匹配的元素(不允许使用复合类名)
css selector 定位 CSS 选择器匹配的元素
id 定位 id 属性与搜索值匹配的元素
name 定位 name 属性与搜索值匹配的元素
link text 定位link text可视文本与搜索值完全匹配的锚元素
partial link text 定位link text可视文本部分与搜索值部分匹配的锚点元素。如果匹配多个元素,则只选择第一个元素。
tag name 定位标签名称与搜索值匹配的元素
xpath 定位与 XPath 表达式匹配的元素


class name定位
1.查找元素:页面打开f12,点击左上角的箭头,再去点击对应需要定位的元素定位,找到该元素下的class属性,在ctrl+f查找,该属性是否唯一,唯一就可以定位,不唯一就换其他方法定位:(一时找不到class唯一的,就用下图代替说明问题)
定位代码:

# 导入需要的包
from selenium import webdriver
from selenium.webdriver.common.by import By


driver = webdriver.Chrome() # 实例化webdriver
driver.get("http://www.baidu.com/") # 打开网页
driver.find_element(By.CLASS, "login-item")



nam、id、link tex、tag name定位和class name类似

driver.find_element(By.NAME, "name定位元素")
driver.find_element(By.ID, "id定位元素")
driver.find_element(By.LINK_TEXT, "LINK_TEXT定位元素")
driver.find_element(By.PARTIAL_LINK_TEXT, "PARTIAL_LINK_TEXT定位元素")
driver.find_element(By.TAG_NAME, "TAG_NAME定位元素")

主要介绍xpath定位,这个可以应对测试中80%以上的定位
1.使用xpath方法结合id、name、class定位也可以

driver.find_element(By.XPATH, "//*[@class='login-default']").click()
driver.find_element(By.XPATH, "//*[@name='login-default']").click()
driver.find_element(By.XPATH, "//*[@id='login-default']").click()

2.xpath:其他属性定位:在实际工作过程中,往往会遇到一个元素id、name、class属性都没有,这时候也可以通过其它属性定位到

driver.find_element(By.XPATH, "//*[@type='password']")

3.xpath:标签定位,在实际工作中,还会遇到一种情况就是相同属性具有同一个名字,这时就需要通过标签筛选,定位更准一点
如果不想制定标签名称,可以用*号表示任意标签
如果想制定具体某个标签,就可以直接写标签名称

driver.find_element(By.XPATH, "//input[@type='password']").send_keys("gld123")
driver.find_element(By.XPATH, "//a[@class='login']").click()

4.xpath:相对路径/绝对路径定位,

如果一个元素,它的属性不是很明显,无法直接定位到,这时候我们可以先找它上一层元素(父元素)
找到父元素后,再找下个层级就能定位到了
要定位的是input这个标签,它的老爸的id=s_kw_wrap.
要是它老爸的属性也不是很明显,就找它爷爷id=form
于是就可以通过层级关系定位到

driver.find_element(By.XPATH, "//div[@class='login-default']/div/span/input").send_keys("17027517202")

5.xpath:索引,

如果一个元素它的兄弟元素跟它的标签一样,这时候无法通过层级定位到。因为都是一个父亲生的,多胞胎兄弟。
虽然双胞胎兄弟很难识别,但是出生是有先后的,于是可以通过它在家里的排行老几定位到。
用xpath定位老大、老二和老三(这里索引是从1开始算起的,跟Python的索引不一样)

driver.find_element(By.XPATH, "//div[@class='login-default']/div[2]/span/input").send_keys("17027517202")

6.xpath:逻辑运算

  1. xpath还有一个比较强的功能,是可以多个属性逻辑运算的,可以支持与(and)、或(or)、非(not)
  2. 一般用的比较多的是and运算,同时满足两个属性
driver.find_element(By.XPATH, "//input[@type='password' and @class='login-default']").send_keys("gld123")

油猴

官方网址:https://www.tampermonkey.net/index.php?ext=gz80&show=dhdg

下载安装那个黑色的

安装后选右上角的扩展程序图标,点tampermonkey,再获取新脚本。在这里面可以输入网站等来获取相关的脚本,获取脚本后打开相关网站就可以使用了,

使用selenium

一、环境搭建
(1)安装selenium库:
如果安装不上就上国内源

pip install selenium -i http://pypi.douban.com/simple –trusted-host pypi.douban.com

(2)下载Chrome驱动:
chromedriver的下载地址http://chromedriver.storage.googleapis.com/index.html

    需要注意的是这里有很多种版本,这里需要下载和你浏览器版本最接近的一个。注意是最接            近,打开浏览器,在地址栏输入chrome://version/便可以查看到谷歌当前的版本号

    解压会得到一个chromedriver.exe(名字不同就必成这个)文件。如果没有最新版本可到以下地址查看
https://googlechromelabs.github.io/chrome-for-testing/

因为chrome会自动更新,所以要在服务或者计划任务管理(控制面板-系统和安全-windows工具-计划任务)里把自动更新禁用

(3)将Chromedriver加入到path:

1.桌面右击谷歌浏览器–>打开文件所在位置,将刚解压的.exe文件复制一份到此路径下

  1. 将刚刚解压的.exe文件复制一份,放入python根目录中 至于如何查看自己的python根目录,可在cmd下进python,再输入 where python可得目录
  2. 将.exe文件再复制并放到当前工程文件同文件夹下

可以测试下看是否可以,python编译器,编写如下代码,运行如果出现窗口,提示正受测试软件控制,说明可以了,(反应慢,第一次可能要1分多钟)

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
sleep(2)
driver.quit()

到此处可能已可以了,如果不行进行4和5步,

(4)将浏览器环境变量添加到path:
打开开始菜单->我的电脑(或计算机)->系统属性->高级系统设置->环境变量,编辑用户变量里的path, 在最后面添加;C:\Program Files (x86)\Google\Chrome\Application\ 或者在最前面添加C:\Program Files (x86)\Google\Chrome\Application\ 修改完之后点击确定按钮保存配置。

如果出错,则:

将chromedriver.exe文件放入python的scripts目录,并将该scripts目录添加到系统path变量中;
3、找到Google Chrome安装目录,一般在C:\Users\Administrator\AppData\Local\Google\Chrome\Application\Google Chrome.exe,将Google Chrome.exe复制一个出来,并重命名为chrome.exe,并将目录C:\Users\Administrator\AppData\Local\Google\Chrome\Application\添加到系统path变量中

注意你的路径不一定和他相同,这个就是右击谷歌浏览器图标的路径,复制下来就好了


VMWare虚拟机设置各虚拟机与主机间局域内网

装好爱快虚拟机后,可以把此虚拟机的其中一张虚拟网卡和电脑及其它虚拟机设置共组一个局域内网。

方法为在虚拟机设置中把这张网卡设置为“仅主机”,然后启动爱快,把这张网卡绑定一个lan口,把IP设置为192.168.80.1,然后进主机系统的网卡设置,把虚拟的Vnet1这个网卡的IP地址设置为192.168.80.2,此时在电脑主机中访问192.168.80.1应该能访问到爱快路由界面了。

找直播m3u8地址

之前找一个被cloudflare加速过的直播,要找他的m3u8地址,那么可以根据fiddler来看到直播的m3u8地址,然后看这个地址里的一串字母,然后用find,在find里把match case,secrch binaries,decode compressed content,select matches,unmark old results等都点上,再查找,最后在之前页面返回响应的syntaxview选项卡里找到m3u8链接,之前因为没有在上面选decode,所以这里面是乱码。