Python Selenium演示|打开网页,滑动网页,定位元素,输入内容,回车

发表时间:2019-12-12

Python Selenium运行原理

Selenium Python库提供了一系列接口(API),比如鼠标点击,拖动,填写输入框等等。WebDriver是chrome浏览器的chromedriver,是用来跟浏览器保持通信,当你调用API时,要靠这个driver来把消息传递给浏览器,浏览器才能响应你。

运行程序后,driver会以进程的方式常驻在内存中,如果是windows用户,你在任务管理器的进程中会看到chromedriver.exe这个进程。

Python Selenium演示程序

我们使用浏览器一般会做以下几件事情:

1.打开网页
2.鼠标滑动页面
3.点击链接
4.网页切换(tab)
5.在表单(输入框)中填写信息,并提交
6.自动读取cookies(实现自动登录等行为)

我们写段程序演示一下1,2,3,5。这段程序演示打开Pythonf首页,并来回滑动页面,点击网站右上角的“Python Free”然后在搜索框中输入“Pycharm”后回车。

代码在Python3.7版本中调试通过。啰嗦完了该上代码了。

#coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

#打开Chrome浏览器
driver = webdriver.Chrome(executable_path="D:/chromedriver/chromedriver.exe")

#浏览器最大化
driver.maximize_window()

#打开Pythonf首页
driver.get('https://www.pythonf.cn')
time.sleep(3)

#滑动到页面中间处
driver.execute_script("window.scrollTo(0,document.body.scrollHeight/2)")
time.sleep(3)

#滑动到页面最下方
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
time.sleep(3)

#滑动到页面最上方
driver.execute_script("window.scrollTo(0,0)")
time.sleep(3)

#通过htmlclass属性来定位链接位置,并点击
driver.find_element_by_class_name('navbar-brand').click()
time.sleep(3)

#找到输入框
search = driver.find_element_by_class_name("form-control")

#输入 Pycharm
search.send_keys(u'Pycharm')
time.sleep(3)

#回车
search.send_keys(Keys.RETURN)

time.sleep(5)
driver.quit()

效果如下:

序列 06.gif

首先是要调用Chrome()方法打开浏览器。

然后是调用get()方法打开Pythonf网站。

页面滑动是靠执行JS代码来实现的,那个代码可以直接拷贝使用。

我们上面的例子是靠找html class属性来实现的,调用的find_element_by_class_name()方法来定位元素的class name, 还可以靠xpath,靠css,靠class id来定位,这都要针对你具体的网站来选择,选择依据就是怎么方便怎么来.

向输入框中输入字符并回车也很简单。先定位到输入框,然后调用send_keys()方法输入。

注意这里只能输入unicode,输utf,gbk编码字符串是要报错的。

总结:
1.上面所有的函数调用都是从 from selenium import webdriver 这个包里调用的,我们要操作的相关API基本都在这里面。

2.点击链接,在输入框里输入字符等操作,要先定位到这个元素处。

3.定位元素的方法有很多:xpath ,css ,class id,class name都可以。

4.程序运行完了要记得调用driver.quit()退出,不然chromedriver.exe进程不会自己退出,反复这样运行程序的话,内存里就会有好几个chromedriver.exe。

5.打开一个网页后浏览器会加载一段时间,在资源还没有加载完的情况下,我们去定位元素有可能是定位不到的,会报错。所以需要添加time.sleep()让它停留一段时间来加载资源。其实selenium是有自己的等待函数的,这里先用time.sleep()来简单代替。

文章来源互联网,尊重作者原创,如有侵权,请联系管理员删除。邮箱:417803890@qq.com / QQ:417803890


Python Free

邮箱:417803890@qq.com
QQ:417803890

皖ICP备19001818号
© 2019 copyright www.pythonf.cn - All rights reserved

微信扫一扫关注公众号:

联系方式

Python Free