初探python+selenium
由于公司网络管管控严格,服务器上访问外网需要进行身份认证(按理说递交个申请给开放相关域名外网访问就好,无奈不给通过,又想马儿跑又不给马吃草),正好前一阵撸课程的时候看到selenium可以实现自动化,顺便撸一波做个记录。
1、安装 selenium
pip install selenium
等待出现Successfully installed selenium
python3.7安装的时候默认安装了pip省心了不少,服务器端用的2.7还要自己撸
下载setuptools 和 pip
解压后进入目录,运行 python setup.py install
2、下载 chromedriver + chrome
下载地址:
chrome需要与对应版本号的chromedriver 相匹配的,版本号不匹配会报错
ChromeDriver v2.41 (2018-07-27)----------Supports Chrome v67-69
ChromeDriver v2.40 (2018-06-07)----------Supports Chrome v66-68
ChromeDriver v2.39 (2018-05-30)----------Supports Chrome v66-68
ChromeDriver v2.38 (2018-04-17)----------Supports Chrome v65-67
ChromeDriver v2.37 (2018-03-16)----------Supports Chrome v64-66
ChromeDriver v2.36 (2018-03-02)----------Supports Chrome v63-65
ChromeDriver v2.35 (2018-01-10)----------Supports Chrome v62-64
# driver = webdriver.Chrome()
当然也可以下载其他浏览器对应的驱动
# driver = webdriver.Firefox()
# driver = webdriver.Ie()
chromedriver.exe 放到python的安装目录下 或者Script目录下 应该是配置到path环境变量下的路径都可以
3、开撸一个简单的例子
#coding=utf-8
import time
from selenium import webdriver
import os
#打开浏览器
browser = webdriver.Chrome()
#请求连接
browser.get("http://baidu.com")
#获取页面元素 输入框
element = browser.find_element_by_id("kw")
#键入内容
element.send_keys("查询内容")
#获取页面元素 查询按钮
element= browser.find_element_by_id("su")
#触发元素点击事件
element.click()
#休眠5秒
time.sleep(5)
#关闭浏览器
browser.quit()
4、一些常用的操作
有需要还是查官方文档吧
1)执行JS
js = "aler('text')"
browser.execute_script(js)
2)窗口操作
- browser.maximize_window() # 全屏
- browser.minimize_window() #最小化
- print (browser.get_window_size()) #获取窗口大小
- browser.set_window_size(1280,800) # 设置分辨率 1280*800
- browser.close() #关闭当前串口
- browser.quit() #退出浏览器
3)元素定位
find_element_by_id() # document.getElementById()
find_element_by_name() #document.getElementsByName()
find_element_by_class_name() #document.getElementByclassName()
find_element_by_tag_name() #document.getElementsByTagName()
find_element_by_link_text() #文本链接定位
find_element_by_partial_link_text() #文本链接中部分文本进行定位 包含参数中的文本即可
find_element_by_xpath() #绝对路径定位
browser.find_element_by_xpath("/html/body/div[2]/div[2]/div[2]/form/div/div/div[2]/input")
从HTML标签开始描述出元素在dom树上的路径
也可以用"//标签[@属性名=属性值]" 例如:find_element_by_xpath(".//input[@id='kw']")
find_element_by_css_selector() #利用css选择器定位 类似JQuery
4)元素操作
clear 清除元素的内容,如果可以的话
send_keys 在元素上模拟按键输入
click 单击元素
submit 提交表单
browser.find_element_by_id("id").clear()
browser.find_element_by_id("id").send_keys("内容")
browser.find_element_by_id("id").click()
browser.find_element_by_id("id").submit ()
5、其他
服务器上执行时遇到错误提示
[22516:20196:0704/024642.979:ERROR:install_util.cc(597)] Unable to read registry value HKLM\SOFTWARE\Policies\Google\Chrome\MachineLevelUserCloudPolicyEnrollmentToken for writing result=2
解决方案如下:
在注册表里加一个值名称为MachineLevelUserCloudPolicyEnrollmen(数据为空)就可以了。
HKLM_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\MachineLevelUserCloudPolicyEnrollmen
Chrome正在受到自动软件的控制
option = webdriver.ChromeOptions()
option.add_argument(‘disable-infobars‘)
browser = webdriver.Chrome(chrome_options=option)
远程浏览器调用
远程浏览器调用无界面实现不会实际打开浏览器,运行速度很快
首先需要下载selenium-server ,地址:https://www.seleniumhq.org/download/
需要配置java环境
控制台输入:java -jar selenium-server-standalone.jar -port 9999 启动
webdriver.Remote(command_executor="[http://localhost:9999/wd/hub](http://localhost:4567/wd/hub "selenium 本地测试地址")", desired_capabilities=DesiredCapabilities.HTMLUNIT)
https://raybit.eu.org 谷歌一下