使用selenium模块控制浏览器
selenium模块可以让Python直接控制浏览器,实际点击链接,填写登录信息。这就意味着Selenium与Requests和Beautiful Soup相比,它更高级但是它也更慢。
启动一个Chrome并打开百度首页 1 2 3 browser = webdriver.Chrome() browser.get('http://www.baidu.com' ) print(type(browser))
在页面寻找元素 1 2 3 有两类方法可以用于寻找元素, 它们是findelements方法和findelement方法 findelement方法返回一个WebElement对象,也就是说它只返回页面中所匹配的第一个元素 findelements方法返回一个WebElement对象列表,它返回页面中所匹配的所有元素
selenium的WebDriver方法,用于寻找元素(只给出了findelement类型方法,findelements类型类似,是需要改动element为elements即可)
browser,find_element_by_class_name(name): 使用CSS类name的元素
browser.find_element_by_class_selector(selector): 匹配CSS selector的元素
browser.find_element_by_id(id): 匹配id属性值的元素
browser.find_element_by_link_text(text): 完全匹配提供的text的元素
browser.find_element_by_partial_link_text(text): 匹配包含提供的text的元素
browser.find_element_by_name(name): 匹配name属性值的元素
browser.find_element_by_tag_name(name): 匹配标签name的元素(大小写无关, 元素匹配’a’和’A’)
WebElement的属性与方法
寻找元素Demo 1 2 3 4 5 6 7 8 9 10 11 from selenium import webdriverurl = 'https://nianchu.space/' browser=webdriver.Chrome() browser.get(url) try : elem=browser.find_element_by_class_name('site-title' ) print('Found <%s> element with that classname!' %(elem.tag_name)) except : print('Was not able to find an element with that name.' )
点击页面 WebElement对象有一个click()方法,可以使用它模拟鼠标在元素上点击。这个方法可以用于跳转链接,选择单选按钮,点击提交按钮等等
1 2 3 4 5 6 7 8 9 10 from selenium import webdriverbrowser = webdriver.Chrome() browser.get("https://nianchu.space/" ) linkElement = browser.find_element_by_link_text('个人网站' ) print(type(linkElement)) linkElement.click()
填写并提交表单 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 from selenium import webdriver""" 本来计划的是Google mail的登录演示,但是webdriver上无法完成,便改为了qq邮箱 """ browser = webdriver.Chrome() browser.get('https://ui.ptlogin2.qq.com/cgi-bin/login?style=9&appid=522005705&daid=4&s_url=https%3A%2F%2Fw.mail.qq.com%2Fcgi-bin%2Flogin%3Fvt%3Dpassport%26vm%3Dwsk%26delegate_url%3D%26f%3Dxhtml%26target%3D&hln_css=http%3A%2F%2Fmail.qq.com%2Fzh_CN%2Fhtmledition%2Fimages%2Flogo%2Fqqmail%2Fqqmail_logo_default_200h.png&low_login=1&hln_autologin=%E8%AE%B0%E4%BD%8F%E7%99%BB%E5%BD%95%E7%8A%B6%E6%80%81&pt_no_onekey=1' ) emailElem = browser.find_element_by_id('u' ) emailElem.send_keys('1234567' ) passWordElem = browser.find_element_by_id('p' ) passWordElem.send_keys('1234567' ) goElem = browser.find_element_by_id('go' ) goElem.click()
*注意: 在任何元素上调用submit()方法,都等同于点击该元素所在表单的Submit按钮 *
发送特殊按键 在浏览网页的时候,我们经常需要使用键盘击键。selenium有一个模块,帮助我们实现了这个功能。
各种按键的值保存在selenium.webdriver.common.keys,在使用的时候向下面这样导入的话,会让后面的使用更加方便。
1 from selenium.webdriver.common.keys import Keys
selenium.webdriver.common.keys模块中常用的变量如下:
1 2 3 4 5 6 7 Keys.DOWN,Keys.UP,Keys.LEFT,Keys.RIGHT Keys.ENTER,Keys.RETURN Keys.HOME,Keys.END,Keys.PAGE_DOWN,Keys.PAGE_UP Keys.ESCAPE,Keys.BACK_SPACE,Keys.DELETE Keys.F1,Keys.F2,...,Keys.F12 Keys.TAB
示例: 发送特殊键时间网页界面在开头和结尾之间来回滚动3次 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 from selenium import webdriverfrom selenium.webdriver.common.keys import Keysimport timebrowser = webdriver.Chrome() browser.get('https://nianchu.space/' ) htmlElem = browser.find_element_by_tag_name('html' ) for i in range(3 ): time.sleep(10 ) htmlElem.send_keys(Keys.END) time.sleep(10 ) htmlElem.send_keys(Keys.HOME)
点击浏览器按钮 selenium有一些方法,可以帮助我们模拟点击各种浏览器按钮,包括下面这些
1 2 3 4 browser.back(): 返回 browser.forward(): 前进 browser.refresh(): 刷新 browser.quit(): 关闭窗口
下面给大家演示其中的一个:refresh()
1 2 3 4 5 6 7 from selenium import webdriverbrowser = webdriver.Chrome() browser.get('https://nianchu.space/' ) browser.refresh()
关于selenium模块的简单介绍就到这里。我是奇奇怪怪,致力于分享有趣使用的奇奇怪怪小技巧。
推荐阅读
欢迎关注我的公众号“奇奇怪怪小技巧 ”