本节目标:能够成功的在window上配置网页自动化测试工具selenium
本节技术点:selenium,浏览器内核
本节阅读需要(20)min。
本节实操需要(20)min。
通过我其他的博客,大家已经知道了动态网页的特征以及识别方式。
作为爬虫程序员如何处理呢?如何获得数据呢?
同样的作为前端开发的程序员,如何证明你的逻辑是对的,总不是所有的情况都要人工吧?
selenium提供的就是模拟浏览器以及浏览器行为的功能。
这样我们就能去实现触发条件,从而得到数据或验证前端逻辑的正确性。
如果说动态网页是根据行为提供变化,那么selenium就是为了特定的目标而提供行为。
selenium本身不是浏览器。
想要调用浏览器需要一个内核驱动。
老实说这个过程还是很折腾的。。。
pip install selenium
我们安装的是以下版本的,还是挺新的
selenium 4.2.0
注意自己用的编译器是哪一个,后面文件要用到。可以通过如下命令查看:
where python
也叫mozilla.
本实例的浏览器以及驱动器
链接:https://pan.baidu.com/s/1mBPUpSkNWylJmnmp-TZbyA
提取码:0l23
安装firefox浏览器。安装很容易
查看firefox的安装目录是否在:环境变量-》系统变量-》path 中,如果不在请添加。查看版本通过
右侧菜单-》帮助-》关于Firefox
3. 下载geckodriver,下载网址:
https://github.com/mozilla/geckodriver/releases
win64下载链接
from selenium import webdriver #导入webdriver包
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary #导入friefox webdriver 包
import time #调入time函数
binary = FirefoxBinary("C:\\Program Files\\Mozilla Firefox\\firefox.exe") #加入Firefox的路径,注意转义
driver =webdriver.Firefox(firefox_binary=binary) #### 定义driver 要操控火狐浏览器 webdriver.firefox
driver.get("http://www.baidu.com")
time.sleep(0.3) #休眠0.3秒
driver.find_element_by_id("kw").send_keys("selenium")
####一个控件有若干属性id 、name、(也可以用其它方式定位),百度输入框的id 叫kw 我要在输入框里输入 selenium 。
driver.find_element_by_id("su").click()
####搜索的按钮的id 叫su ,我需要点一下按钮( click() )。
time.sleep(3) # 休眠3秒
print(driver.title) # 把页面title 打印出来 当没看到整个脚本执行过程时,看到打印出这句话,就说明页面被正确打开了
driver.quit() #退出并关闭窗口的每一个相关的驱动程序 类似的表弟为 driver.close()
# driver.close() #关闭当前窗口
一般复制粘贴就可以。。。
出现这个远程控制的机器人就成功了!!!!
我的实例中用到的,亲测有效
链接:https://pan.baidu.com/s/1ZxXVIgFDWWspgM8NQcqilQ
提取码:pmbs
2. 安装谷歌驱动
chromedriver下载地址
请根据具体的版本下载.不然无法驱动.
最好安装到你正在适用的python解释器所在的同级目录。
然后添加系统环境变量,主要是Python程序需要外部调用驱动器,所以需要全局的变量名!!!
3.测试
运行如下代码
from selenium import webdriver
import time
# 创建Chrome浏览器对象
browser = webdriver.Chrome()
#访问百度网站
browser.get('http://www.baidu.com/')
#阻塞3秒
time.sleep(3)
# 自动退出浏览器
browser.quit()
微软是比较特立独行的,几乎前端的大部分基础思维都和其他几家有很大的差别。。。
所以很多网页效果或操作总是分开讨论的。
一个被前端程序员骂死的浏览器。。。
Edge自带的无需安装。。。
1.查看帮助找到版本信息Go to edge://settings/help and note your version of Microsoft Edge.
2.安装对应的driver
driver
可能需要。
链接:https://pan.baidu.com/s/1zmEX-3r-UEA_vW1_hvRatA
提取码:rygj
因为微软家edge自动更新,所以一般就是最新的。。。
同样需要添加环境变量!!!
Selenium 4 内置支持 Microsoft Edge。
如果使用 Selenium 4,则无需使用 Selenium Tools for Microsoft Edge。
测试一下
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver = webdriver.Edge()
driver.get('https://bing.com')
element = driver.find_element(By.ID, 'sb_form_q')
element.send_keys('WebDriver')
element.submit()
time.sleep(5)
driver.quit()
成功!!!
这个不是必须的,而且貌似只有火狐狸支持。
暂时不介绍了,后面有机会分享
基本思路而已,但是可能会报错!!!
from selenium import webdriver
driver = webdriver.Firefox() # Firefox浏览器
# driver = webdriver.Firefox("驱动路径")
driver = webdriver.Chrome() # Chrome浏览器
driver = webdriver.Edge() # Edge浏览器
driver = webdriver.PhantomJS() # PhantomJS
# 打开网页
driver.get(url) # 打开url网页 比如 driver.get("http://www.baidu.com")
查看返回值如果有就算成功。
edge的不要强求,微软家的比较奇怪,其他的两个必须要成功!!!
selenium的本质也可以认为是js.通过js去特定的执行一些点击,移动的命令。
我们注意到其实现在各个浏览器的调用都是不太一样的了。
selenium3.0在firefox浏览器中提供了GeckDriver,需要使用它,也就是说之前的默认自带的driver在selenium30.已经不能使用了,需要使用GeckDriver,GeckDriver代替了之前的自带默认的driver
其实现在都是自己的驱动器了。
如果害怕版本问题,请使用我提供的百度链接里面的。。。但是思路基本一致。
下一讲,介绍如何使用selenium实现各种行为。
后面的文章还会分享,特殊的浏览器–无头浏览器