selenium 学习整理
初学者,如果有不当得地方请指出,非常感谢。
准备事项:
1. Python 安装包
安装Python,并勾选添加环境变量。
安装完成后,打开dos窗口,输入python,看能否进入python命令行模式。如果不能就手动添加一下环境变量。
2. Chrome 安装包(其他浏览器也可以,Chrome支持得比较好;如果用IE得话,需要再设置--安全,关闭浏览器得保护模式,一个四个)
3. 浏览器版本对应得ChromeDriver.exe (去浏览器官网可以找到,必须和浏览器版本对应)
不需要安装,直接复制到python安装目录下就好。
4. Selenium 安装包
解压到 Python\Python35\Lib\site-packages 。注意:最好直接解压到该目录下,如果是拷贝得话,要确认打开selenium文件夹,直接看到init文件。
验证:打开dos窗口,进入python 命令行模式,输入 from selenium imprt webdriver (没报错得话证明解压得没问题,python能直接识别该文件);
再次输入 webdriver.Chrome() ,期望结果是启动浏览器。证明浏览器和对应得驱动是无误得。
5. 安装Pycharm (其实就是一编写工具,用自带得也行)
开始喽:
from selenium import webdriver # 从selenium 中将webdriver 导入当前
driver = webdriver.Chrome() # driver 是变量名,便于后面使用,起什么名都行
driver.get("http://localhost") # 打开指定网址
driver.maximize_window() #字面意思,最大化浏览器窗口,目前学习阶段没看到有啥用==
driver.implicity_wait(30) # 隐式等待,比如你提交表单得时候,服务需要时间才能给到你响应,这个时候如果不让浏览器等待,直接执行下面得语句可能就会得到错误得结果。这个语句是为了便于阅读加到这。Q:这个语句是必须得么?我去百度下。。。A: 待更新。。。没找到答案,
顺便提一下,还有一种是显示等待time.sleep(5) 对于浏览器弹窗得行为,隐式等待不起作用。
今天主要针对网站得登录注册自动化。界面是下面这样得:
from selenium import webdriver driver = webdriver.Chrome()
driver.get("http://localhost/")
driver.maximize_window()
driver.find_element_by_link_text("注册").click()
# find_element_by_ 通过各种方式获取目标节点,click()模拟用户点击
点击按钮这块有个坑。点击后,会新打开一个页面。而Selenium 默认针对第一个tab页。这个时候有两种方式,一种是使用switch切换窗口;一种是清除页面中新打开窗口target属性,然后再点击。下面分别写一下。
from selenium import webdriver driver = webdriver.Chrome()
driver.get("http://localhost/")
driver.maximize_window()
driver.find_element_by_link_text("注册").click()
# find_element_by_ 通过各种方式获取目标节点,click()模拟用户点击 current_tab = driver.current_window_handle
# current_tab 是首页
all_tab = driver.window_handles
for i in all_tab:
if i == current_tab:
driver.close()
else:
driver.switch_to.window(i)
这个是使用switch方式切换,并把另一个tab页关闭,这样就保持了浏览器一直一个tab页。
from selenium import webdriver driver = webdriver.Chrome()
driver.get("http://localhost/")
driver.maximize_window() js = 'document.getElementsByClassName("site-nav-right fr")[0].childNodes[3].removeAttribute("target")'
# 注意单双引号
driver.execute_script(js)
driver.find_element_by_link_text("注册").click()
# find_element_by_ 通过各种方式获取目标节点,click()模拟用户点击
中间有一句JavaScript代码,这个需要在浏览器调试模式中,逐级找到目标节点,然后执行清除属性,最好是实验好了,直接粘到python代码中。
== 先去吃饭,晚上回来接着写。一边写一边练习一边问自己为什么。感觉棒棒哒~