想要运行selenium server,必须要有Java环境,需要配置和安装JDK和JRE
安装好后,下载selenium server的jar包https://selenium.dev/downloads/
然后使用java环境打开jar包:
这样就启动好了selenium的server
启动起来后,试着运行一个RC脚本,以下代码只能在python2中运行,python3中不能运行,python3中貌似已经没有selenium的包了,也不支持RC了:
from selenium import selenium
sel = selenium("127.0.0.1",4444,"*firefox","https://www.baidu.com")
sel.start()
sel.open("/")
sel.type("id = kw","selenium grid")
sel.click("id=su")
sel.wait_for_page_load("30000")
sel.stop()
grid与webdriver的区别就是,webdriver需要各种浏览器的驱动,grid是需要server的支持。
grid是用来执行分布式的,需要多个节点
grid:
hub 主节点,有且只有一个
node 分支节点,可以有无数个
所以selenium server启动时,需要指定一个主节点,以上代码运行后,默认的节点是127.0.0.1,端口号是4444
手动指定的话,后面加role(角色):
java -jar selenium-server-standalone-3.141.59.jar -role hub
如图:
这样指定之后,hub主节点指向的是4444端口号的主分支
然后可以使用node去指定分支
java -jar selenium-server-standalone-3.141.59.jar -role node -port 5555
如图:
分支必须一个参数(指定端口号时,必须重新换个新的端口号,因为默认的4444已被主节点使用了)
--------------------------------------------------------------------------------------------------------------------------------------------
webdriver的原理:
其实原理跟selenium RC也是用本地端口号是4444来运行的,只是webdriver是写死的,想用其他地址的话, 直接在以上这个类中去更改主节点使用remote方法
以实际webdriver脚本来解释:
from selenium import webdriver
import time
browsers = ['firefox','chrome','internet explorer']
for b in browsers:
dr = webdriver.Remote(command_executor='http://192.168.31.111:5555/wd/hub',
desired_capabilities= {
"browserName": "b",
"marionette": True,
"acceptInsecureCerts": True,
})
dr.get("https://www.baidu.com")
dr.find_element_by_id("kw").send_keys(b)
dr.find_element_by_id("su").click()
time.sleep(2)
dr.close()
系统会将运行的log会打印在端口号为5555的DOS界面内,而且相应的对打开各个浏览器执行操作。
--------------------------------------------------以上跑的都是本地节点---------------------------------------------------------------
跑远程节点
我们将远程节点都定义在分支节点内
可以先在虚拟机中运行,而且要连上网络
条件:
- 本地主机和远程主机是能ping通IP地址,比如远程主机IP为192.168.31.224,在本机的DOS界面>>>ping 192.168.31.224,看是否能接受到远程主机的回复信息,这只是单向的,也要在远程主机上ping一下本地主机的IP地址,看是否能接受到本地主机的回复信息。能ping通表示能相互访问
- 远程主机也需要运行selenium server的子节点。所以远程主机也需要java环境,也需要selenium server的jar包
- 需要有相应脚本内要求的浏览器和驱动
启动本机hub主机
java -jar selenium-server-standalone-3.141.59.jar -role hub
启动远程node主机,设置端口号为5555
java -jar selenium-server-standalone-3.141.59.jar -role node -port 5555 -hub http://本地主机的IP地址:主节点端口号/grid/register
(设置的端口号为5555,指向hub 主机-IP为192...)
然后在本地主机运行脚本,脚本内的地址需要指定远程主机IP地址和端口号
通过浏览器访问grid的控制台:http://http://127.0.0.1:4444/grid/console,如图:
Edge浏览器
目前selenium2已经支持Edge浏览器,不过,Edge浏览器只能运行于Windows10,也是需要下载驱动。在脚本中命名:
from selenium.webdriver import Remote
import time
dc = {'browserName':'MicrosoftEdge'}
driver =Remote(command_executor='http://192.168.31.111:5555/wd/hub',
desired_capabilities= {
"browserName": "b",
"marionette": True,
"acceptInsecureCerts": True,
})
driver.get("https://www.baidu.com")
driver.find_element_by_id("kw").send_keys("MicrosoftEdge")
driver.find_element_by_id("su").click()
time.sleep(2)
driver.close()
safari浏览器
需要用safari浏览器去跑脚本的话,这个浏览器没有驱动,这个浏览器已经继承到selenium server中了。执行代码如下:
先启动selenium server
from selenium.webdriver import Remote
import time
dc = {'browserName':'safari'}
driver =Remote(command_executor='http://192.168.31.111:5555/wd/hub',
desired_capabilities= dc)
driver.get("https://www.baidu.com")
driver.find_element_by_id("kw").send_keys("safari")
driver.find_element_by_id("su").click()
time.sleep(2)
driver.close()
HtmlUnit模式
HtmlUnit官方网站:http://http://htmlunit.sourceforge.net
HtmlUnit是一款开源的Java页面分析工具,读取页面后,可以有效的使用HtmlUnit分析页面上的内容。项目可以模拟浏览器运行,被誉为java浏览器的开源实现,这个没有界面的浏览器,运行速度也是非常的迅速,selenium server中同样包含了HtmlUnit驱动
这样的好处就是能节省运行时间
phatomJS
这种方式是运行脚本最快迅速的方式,这个也是需要下载驱动的。就是人们俗称的爬虫,它跟HtmlUnit一样是不会真正打开一个浏览器。推荐
selenium grid只能分布式,不能并行,只有结合python的多线程,就会实现分布式,并且并行
分布式:在不同的平台上执行
并行:同时在不同的平台上同时执行
java中的TestNG很强大,可以学学,能甩unittest好几条街